JavaScript, který se dá číst. I psát.
Transkript
CoffeeScript JavaScript, který se dá číst. I psát. Jan Bednařík ‐ @janbednarik Co nás čeká 1. 2. 3. 4. Proč říci JavaScriptu ne JavaScript ‐> CoffeeScript CoffeeScript podrobněji Tajemství designu programovacích jazyků Temná historie JavaScriptu JavaScript vznikl v roce 1995 během války prohlížečů (Browser Wars) Netscape chtěl vytvořit skriptovací jazyk pro neprogramátory Brendan Eich navrhnul a implementoval JavaScript během 10‐ti dnů neřízený rozvoj jazyka (Netscape VS Microsoft) pomalá implementace standardů v prohlížečích pomalý vývoj prohlížečů a "nekonečná" zpětná kompatibilita žádné vývojové a debugovací nástroje (FireBug 1.0 v roce 2006) JavaScript a uživatelé JavaScript = vyskakovací okna Od roku 2004 umí blokovat vyskakovací okna už i Internet Explorer. JavaScript a programátoři Sčítáme hrušky a jablka > 10 + "10"; "1010" To bylo jasné že to není 20! > var nic = null; > nic + "A"; "nullA" LOL? JavaScript a programátoři Rovná se? > var formatujDisk = false; > if (formatujDisk = true) console.log("Formátuji!"); Formátuji! > formatujDisk true Hej! Tam patří dvě rovnítka == JavaScript a programátoři Tak tedy == > 10 == "10"; true Tak ne asi... když se to dá sčítat, tak se to musí rovnat... Počkej! V JavaScriptu piš jedině === > 10 === "10"; false Takové jednoduché řešení problému? Bohužel ne... JavaScript a programátoři > var foo = []; > foo === true; false Publikum: Potlesk! > foo == true; false Publikum: Potlesk! > if (foo) { console.log("True jak bič!"); } else { console.log("False, co si čekal?"); } True jak bič! Publikum: Teď můžete brečet... JavaScript a programátoři Napíšeme si funkci, která vrátí true, pokud je v řetězeci číslo. > var isNumber = function(s) { var result = parseInt(s); // pokusíme se převést string na číslo return typeof result === "number"; // true pokud je výsledek typu number } > isNumber("100"); true > isNumber("JavaScript"); true ??? > parseInt("JavaScript"); NaN // znamená Not A Number > typeof NaN; "number" WTF!? JavaScript a programátoři A: "To by stačilo." B: "Mám ještě pár příkladů..." A: "Není třeba, s JavaScriptem už nechci mít nic společného!" B: "Ale budeš mít. JavaScript je JEDINÝ rozšířený skriptovací jazyk pro internetové prohlížeče." Shrnutí JavaScript je nedomyšlený paskvil, se kterým není radno si začínat. JavaScript je JEDINÝ rozšířený skriptovací jazyk pro internetové prohlížeče. A ještě dlouho bude. Co s tím? Preprocesory, knihovny, jazyky 40+ knihoven napsaných v JavaScriptu doplňujících JavaScript o OOP s klasickým třídami, statické typování, striktní režimy psaní kódu, ... 80+ nástrojů pro převod kódu z jiných jazyků do JavaScriptu (C#, Java, Python, Lisp, Ruby, Perl, PHP, C, C++, ...) 30+ nových jazyků kompilovaných do JavaScriptu (CoffeeScript, TypeScript, LiveScript, Dart, ...) desítky dalších nástrojů, jako třeba virtuální stroje a interprety jiných jazyků, více na altjs.org Programuje ještě vůbec někdo v čistém JavaScriptu? CoffeeScript nový jazyk kompilovaný do JavaScriptu kompilátor napsaný v JavaScriptu 100% kompatibilita s JavaScriptem (kód, knihovny, atd.) snaží se programátorům jednoduchou formou poskytnout to dobré z JavaScriptu čitelná syntaxe inspirovaná jazyky Python a Ruby zásadní úspora kódu oproti ekvivalentnímu kódu v JavaScriptu nejpopulárnější z nástrojů řešících problémy JavaScriptu 10. nejpopulárnější jazyk na GitHubu CoffeeScript.org Jak rozjet CoffeeScript 1. Interaktivně v prohlížeči <script src="coffee-script.js"></script> Živě intepretuje soubory .coffee 2. Kompilátor a REPL (interaktivní konzole) npm install -g coffee-script Program coffee spouštěný z terminálu. 3. Pluginy pro editory Při uložení .coffee se automaticky kompiluje do .js JavaScript ‐> CoffeeScript Pryč se středníky JavaScript: var foo = "Hello"; if (foo === "Hello") { var bar = "World"; alert(foo + " " + bar + "!"); } else { alert(Math.floor(Math.random() * 11)); }; (skoro) CoffeeScript: var foo = "Hello" if (foo === "Hello") { var bar = "World" alert(foo + " " + bar + "!") } else { alert(Math.floor(Math.random() * 11)) } Nejsou třeba, protože nikdo nepíše celý skript na jeden řádek. JavaScript ‐> CoffeeScript Pryč s kudrlinkami JavaScript: var foo = "Hello"; if (foo === "Hello") { var bar = "World"; alert(foo + " " + bar + "!"); } else { alert(Math.floor(Math.random() * 11)); }; (skoro) CoffeeScript: var foo = "Hello" if (foo === "Hello") var bar = "World" alert(foo + " " + bar + "!") else alert(Math.floor(Math.random() * 11)) Pěkný kód je odsazený. Kudrlinky tak nemají smysl. JavaScript ‐> CoffeeScript Pryč se deklarací proměnných JavaScript: var foo = "Hello"; if (foo === "Hello") { var bar = "World"; alert(foo + " " + bar + "!"); } else { alert(Math.floor(Math.random() * 11)); }; (skoro) CoffeeScript: foo = "Hello" if (foo === "Hello") bar = "World" alert(foo + " " + bar + "!") else alert(Math.floor(Math.random() * 11)) Kompilátor sám pozná, co je proměnná. Všechny proměnné jsou definovány v lokálním jmenném prostoru. JavaScript ‐> CoffeeScript Pryč se zbytečnými závorkami JavaScript: var foo = "Hello"; if (foo === "Hello") { var bar = "World"; alert(foo + " " + bar + "!"); } else { alert(Math.floor(Math.random() * 11)); }; (skoro) CoffeeScript: foo = "Hello" if foo === "Hello" bar = "World" alert foo + " " + bar + "!" else alert Math.floor Math.random() * 11 Závorky nikdy ničemu nevadí, pokud nejste fandové Ruby syntaxe, klidně je piště kde chcete. JavaScript ‐> CoffeeScript Pryč s magickými rovnítky JavaScript: var foo = "Hello"; if (foo === "Hello") { var bar = "World"; alert(foo + " " + bar + "!"); } else { alert(Math.floor(Math.random() * 11)); }; (skoro) CoffeeScript: foo = "Hello" if foo == "Hello" bar = "World" alert foo + " " + bar + "!" else alert Math.floor Math.random() * 11 == se automaticky kompiluje do === JavaScript ‐> CoffeeScript Pryč se sčítáním řetězců JavaScript: var foo = "Hello"; if (foo === "Hello") { var bar = "World"; alert(foo + " " + bar + "!"); } else { alert(Math.floor(Math.random() * 11)); }; CoffeeScript: foo = "Hello" if foo == "Hello" bar = "World" alert "#{foo} #{bar}!" else alert Math.floor Math.random() * 11 Hele, už je to CoffeeScript! CoffeeScript Funkce JavaScript: var sum = function(a, b) { return a + b; } CoffeeScript: sum = (a, b) -> a+b místo function napíšeme jen ‐> return není třeba, funkce vždy vrátí hodnotu posledního výrazu Funkce default argumenty foo = (bar="hello", baz=null) -> null Deklarace objektů JavaScript: var message = { to: { name: "Honza", email: "[email protected]" }, text: "Nuda jak nechceš." }; CoffeeScript: message = to: name: "Honza" email: "[email protected]" text: "Nuda jak nechceš." Deklarace polí JavaScript: var numbers = [1, 2, 3]; var animals = [ "dog", "cat", "bat" ]; CoffeeScript: numbers = [1, 2, 3] animals = [ "dog" "cat" "bat" ] Operátory CoffeeScript: JavaScript: ==, is !=, isnt not and or true, yes, on false, no, off @, this of in === !== ! && || true false this in (není v JS) if if name == "Michal" console.log "Ahoj Michale" else console.log "Dobrý den" zkrácená forma if foo is true then bar() else baz() jako přípona sayHello() if greet is true podmiňovací zápis mood = if monday then "bad" else "good" for JavaScript: for (var n=0; n<=10; n++) { console.log(n); }; CoffeeScript: for n in [0..10] console.log n for JavaScript: var foo = ["a", "b", "c"]; for (var n=0; n<foo.length; n++) { console.log(foo[n]); }; CoffeeScript: foo = ["a", "b", "c"] for item in foo console.log item řádkový zápis console.log item for item in foo List Comprehension map: bigChars = (item.toUpperCase() for item in ["a", "b", "c"]) filter: myAnimals = ["spider", "cat", "snake"] dangerous = (animal for animal in myAnimals when animal isnt "cat") Třídy class Animal constructor: (@name) -> move: (meters) -> alert @name + " moved #{meters}m." class Snake extends Animal move: -> alert "Slithering..." super 5 class Horse extends Animal move: -> alert "Galloping..." super 45 sam = new Snake "Sammy the Python" tom = new Horse "Tommy the Palomino" sam.move() tom.move() Tajemství designu programovacích jazyků John McCarthy Lisp, 1958 Dennis Ritchie C, 1973 Bjarne Stroustrup C++, 1983 Guido van Rossum Python, 1991 James Gosling Java, 1995 Brendan Eich JavaScript, 1995 Teorie vlivu vousů na design programovacích jazyků Anders Hejlsberg C#, 2001 Larry Wall Perl, 1987 The End
Podobné dokumenty
Stáhnout dodatek k rubrice Na okraji, Hudba a tvořivost
Melodie sestává z jednotlivých tónů. Tóny však
vynikají především na podkladě harmonického
základu. Může se tedy stát, že i když budeme hrát
v sólu pouze tři stejné tóny, posluchačům se přesto budo...
JavaScript pro lenochy efektivně
„Matematik či programátor musí být líný a
přesný.“
líný přístup = řešit problémy efektivně
přesnost = pište testy!
Číslo 8 - Klub přátel polských automobilů
rovněž upozornil na zadní stranu obálky, zobrazující známý polský užitkový vůz Jelcz 315
s popelářskou nástavbou. V této souvislosti si troufám tvrdit, že jsme vůbec první motoristický
magazín, kte...
"DIAQUICK" ROTAVIRUS kazeta
Neotevírejte ochranný obal pokud nejste připraveni zahájit test
Neukápněte vzorek do okénka pro výsledky
Nedotýkejte se okénka pro výsledky rukou, mohlo by dojít ke kontaminaci
Abyste zabránili kří...
Srovnání PHP s ASP.NET
Náplní práce je komplexní srovnání dvou rozšířených technologií pro vývoj webových aplikací, skriptovacího PHP 5 s objektovým ASP.NET 1.1. Cílem textu je podat dostatečné podkladové informace pro v...
H.264 DVR - Express Alarm
• Zadní panel tohoto DVR musí být ve vzdálenosti 15cm či ve větší vzdálenosti
od jiných objektů či zdi, aby bylo umožněno chlazení ventilátorem;
• DVR musí pracovat pouze za teploty, vlhkosti a nap...
Kaskádové styly
Podpora v prohlížečích ........................................................... 9
Připojení stylu ke stránce ...................................................... 10
Připojení stylu z externího...