JAVASCRIPT COMPLETE COURSE
ΕΝΟΤΗΤΑ 1 - HOW JAVASCRIPT WORKS
INTRODUCTION
Πριν ξεκινήσουμε να γράφουμε παραδείγματα και εφαρμογές σε JavaScript, θεωρώ σωστό να καταλάβουμε τι ακριβώς είναι η JavaScript και που μπορεί να χρησιμοποιηθεί. Οπότε σε αυτό το δωρεάν μάθημα JavaScript θα εξηγήσουμε πως εκτελείτε η JavaScript στους browsers, τι είναι το ECMA και πως μπορούμε να εκτελέσουμε JavaScript κώδικα εκτός browser.
DEFINING JAVASCRIPT
Ένα από τα site που θα επισκεπτόμαστε, σχεδόν σε κάθε δωρεάν JavaScript μάθημα που θα δημιουργήσουμε στο Ground of Code, είναι το Mozilla MDN και πιο συγκεκριμένα η ενότητα JavaScript (JavaScript | MDN (mozilla.org)). Ο Mozilla οργανισμός έχει καταφέρει να δημιουργήσει ένα ολοκληρωμένο οδηγό στη γλώσσα JavaScript που περιλαμβάνει τόσο τη θεωρία όσο και μικρά ολοκληρωμένα παραδείγματα. Σε αυτή τη σελίδα λοιπόν θα βρείτε και τον επίσημο ορισμό της JavaScript.
Αν και ορισμός είναι μικρός μπορεί να μην είναι και τόσο κατανοητός. Πάμε λοιπόν να δούμε τι ακριβώς σημαίνουν όλοι αυτοί οι όροι όπως lightweight, interpreted, και just-in-time.
Όταν χαρακτηρίζουμε την JavaScript σαν lightweight στην ουσία περιγράφουμε την ιδιότητα που έχει να καταναλώνει ελάχιστους πόρους από το σύστημα επάνω στο οποίο εκτελείται. Αυτός είναι και ένας από τους λόγους που η JavaScript έχει γίνει διάσημη στο τεχνολογικό κόσμο του Web γιατί ενώ έχει άπειρες δυνατότητες και εφαρμογές οι απαιτήσεις της σε πόρους και υπολογιστική δύναμη είναι λιγοστές.
Τώρα πάμε στον επόμενο ορισμό ο οποίος περιγράφει την JavaScript σαν interpreted programming language. Για να καταλάβουμε τι σημαίνει interpreted ας δούμε πρώτα πως χωρίζονται γενικότερα οι γλώσσες προγραμματισμού.
Όλες οι γλώσσες προγραμματισμού ανήκουν σε μια από τις δύο κατηγορίες – compiled ή interpreted.
COMPILED PROGRAMMING LANGUAGES
την κατηγορία των compiled languages ανήκουν εκείνες οι γλώσσες προγραμματισμού που σαν πρώτο βήμα έχουν την δημιουργία ενός καινούργιου αρχείου και σαν δεύτερο βήμα την εκτέλεση του. Το αρχείο δημιουργείται από τον compiler της εκάστοτε γλώσσας προγραμματισμού αφού πρώτα έχει ελεγχθεί ο κώδικας για τυχόν λάθη. Το αρχείο αυτό περιλαμβάνει τον κώδικα μας σε machine-code γλώσσα που καταλαβαίνει το CPU του υπολογιστή για να εκτελέσει σωστά την εφαρμογή. Η εκτέλεση του αρχείου είναι γρήγορη γιατί ο κώδικας έχει ήδη ελεγχθεί και μορφοποιηθεί στην γλώσσα που καταλαβαίνει ο υπολογιστής.
INTERPRETED PROGRAMMING LANGUAGES
Στις interpreted γλώσσες προγραμματισμού, ο κώδικα διαβάζεται γραμμή προς γραμμή, ελέγχεται για τυχόν λάθη, μεταφράζεται σε low-code, και εκτελείται ταυτόχρονα.
Τώρα όμως σίγουρα σας έχει δημιουργηθεί στο μυαλό η εξής ερώτηση: Στις compiled γλώσσες προγραμματισμού υπάρχει ο compiler (που περιέχεται μέσα στην εκάστοτε γλώσσα προγραμματισμού) που αναλαμβάνει την μετάφραση του κώδικα. Στις interpreted γλώσσες προγραμματισμού, όπως είναι η JavaScript, ποιος αναλαμβάνει να κάνει αυτή την διαδικασία? Στην περίπτωση της JavaScript την διαδικασία του compilation την αναλαμβάνει ο browser. Κάθε browser περιέχει ένα JavaScript ενσωματωμένου engine που μπορεί να αναγνωρίσει και να εκτελέσει JavaScript κώδικα. Browsers όπως ο Chrome ή ο Edge χρησιμοποιούν το V8 (V8 JavaScript engine) για να εκτελέσουν JavaScript εφαρμογές ενώ ο Mozilla χρησιμοποιεί το SpiderMonkey (Home | SpiderMonkey JavaScript/WebAssembly Engine). Ο λόγος που ο κάθε browser χρησιμοποιεί το δικό του JavaScript engine είναι για να μπορούν να το τροποποιήσουν με βάση τις ανάγκες τους και να βελτιώσουν το χρόνο εκτέλεσης του JavaScript κώδικα διαφημίζοντας ταυτόχρονα ότι ο δικός τους browser είναι καλύτερος, ασφαλέστερος και γρηγορότερος από εκείνους των ανταγωνιστών.
Οπότε έχουμε το JavaScript engine ενσωματωμένο σε κάθε browser ο οποίος παίζει το ρόλου του compiler. Με άλλα λόγια διαβάζει όλο τον JavaScript κώδικα, μετά το μεταφράζει σε machine code και τέλος τον εκτελεί.
ECMA STANDARDS AND SPECIFICATIONS
Πως όμως όλοι οι browsers, αν και χρησιμοποιούν διαφορετικά JavaScript engines, μπορούν να εκτελέσουν τον ίδιο JavaScript κώδικα? Για να υπάρχει συμβατότητα ανάμεσα στους browsers και στα engines που χρησιμοποιούν δημιουργήθηκε ο οργανισμός ECMAScript (ECMA-262 – Ecma International (ecma-international.org) που σκοπός του είναι να ορίζει τους γενικούς κανόνες και τις προδιαγραφές που πρέπει να ακολουθούν όλα τα engines ασχέτως από τον τρόπο υλοποίησης τους για να εκτελούν σωστά τον ίδιο JavaScript κώδικα.
Σίγουρα θα έχετε ακούσει ότι η JavaScript μπορεί να χρησιμοποιηθεί για να γράψει και εφαρμογές για τους υπολογιστές (Desktop) ή ακόμα και εφαρμογές για microservices. Πως όμως δυνατόν να χρησιμοποιηθεί η JavaScript εκτός browser αφού μόνο ο browser έχει ενσωματωμένο το engine?
JAVASCRIPT OUTSIDE THE BROWSER
Αφού λοιπόν με το πέρασμα των χρόνων ωρίμασε αρκετά η JavaScript σαν Web γλώσσα προγραμματισμού, πήραν το V8 engine και το έκαναν αυτόνομο πρόγραμμα με το όνομα Node.js (Node.js (nodejs.org)). Οπότε από εκεί που η JavaScript ήταν μόνο client-side γλώσσα προγραμματισμού τώρα έγινε και server-side δίνοντας την ικανότητα στους προγραμματιστές να γράφουν JavaScript σε οποιαδήποτε πλατφόρμα χρησιμοποιώντας αποκλειστικά και μόνο μια γλώσσα
Σήμερα έχουμε μια μεγάλη γκάμα από JavaScript frameworks που μας βοηθάνε να δημιουργήσουμε πολύ εύκολα εφαρμογές σε διάφορες πλατφόρμες. Για παράδειγμα, για Web εφαρμογές έχουμε το React, Angular και το Vue, για backend έχουμε το express.js, για mobile έχουμε το React Native ενώ για desktop εφαρμογές έχουμε το ionic. Φυσικά η λίστα είναι μεγάλη και εδώ μόνο παρουσιάζουμε μερικά από τα frameworks που χρησιμοποιούνται αλλά όλα στηρίζονται στην JavaScript.
ΕΙΣΗΓΗΤΗΣ
Μιχάλης Κασάπογλου
Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.