JavaScript, který se dá číst. I psát.

Transkript

JavaScript, který se dá číst. I psát.
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

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...

Více

JavaScript pro lenochy efektivně

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!

Více

Číslo 8 - Klub přátel polských automobilů

Čí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...

Více

"DIAQUICK" ROTAVIRUS kazeta

"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ří...

Více

Srovnání PHP s ASP.NET

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...

Více

H.264 DVR - Express Alarm

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...

Více

Kaskádové styly

Kaskádové styly Podpora v prohlížečích ........................................................... 9 Připojení stylu ke stránce ...................................................... 10 Připojení stylu z externího...

Více