Эволюция
vs
Революция
JavaScript Клевый !
Text
Пока маленький...
Большой JS проект
(50 - 100 kloc)
Чего ждем
А пока ждали
- Rails
- DropBox
- GitHub
http://coffeescript.org/
function test(a,b){
var c = a*b;
return c;
}
var c = test(12, 24);
Синтаксический Cахар
//лямбды
square = (x) -> x * x
//операторы
eat food for food in ['toast', 'br']
//классы
class Snake extends Animal
move: ->
alert "Slithering..."
super 5
Плюсы
Минусы
http://dartlang.org
function test(a,b){
var c = a*b;
return c;
}
var c = test(12, 24);
int test(int a,int b){
Размер имеет значение
2011
main() => print('Hello!');
100kb
2012
20kb
2014
8 loc
Плюсы
Минусы
Личный опыт
Они убили innerHTML
Очень неторопливый IDE ( Eclipse )
Приятный синтаксис
Не хватает гибкости javascripta
Встроенный пакетный менеджер
- Microsoft
http://typescriptlang.org
function test(a,b){
var c = a*b;
return c;
}
var c = test(12, 24);
Эволюция вместо революции
Любой JavaScript код - это валидный TypeScript
Полная совместимость со все что уже написано на JavaSctipr
Типы данных
var width = 6;
var height: number = 6;
function test(width,
height: number){
...
}
test(6, "a"); //error
Типы данных
interface Event {
x : number;
y : number;
z?: number;
}
var c:Event = { x:1, y:2 };
var d:Event = { x:1, y:2, a:5 };
var e:Event = { x:1 }; //error
Типы данных
... а зачем оно надо ?
Типы и существующий Javascript
http://definitelytyped.org/
npm install tsd -g
tsd query bootstrap
Функции
function add(x, y = "10"){
return x+y;
}
function add(x, y?){
return x + (y || 10);
}
function add(x, ...rest){
return x + rest[0];
}
Функции
var card = {
stack:array(52),
getOne:function(){
var i = Math.floor(Math.random() * 52)
return this.stack[i];
}
}
addEventListener("click", card.getOne);
Функции
var card = {
stack:array(52),
getOne:() => {
var i = Math.floor(Math.random() * 52)
return this.stack[i];
}
}
addEventListener("click", card.getOne);
Классы vs Prototypes
Классы
class Greeter {
greeting: string;
constructor(message: string) {
this.greet = message;
}
greet() {
return "Hello, " + this.greet;
}
}
var greeter = new Greeter("world");
Классы в JS
var Greeter = (function(){
function Greeter(message) {
this.greet = message;
}
Greeter.prototype.greet = function(){
return "Hello, " + this.greet;
};
return Greeter;
})();
var greeter = new Greeter("world");
Классы
class NewGreeter extends Greeter{
private _isNew: bool;
constructor(message: string) {
super(message);
}
set isSuper(value: bool){
this._isNew = value;
}
get isSuper() : bool{
return this._isNew;
}
}
Модули
Модули
---- check.ts ----
module check {
export class StringCheck{
isNice(s: string): { ... };
}
}
---- logic.ts ----
import myCheck = require('check');
new myCheck.StringCheck();
Модули в JS
define(
["require", "exports", 'check'],
function(require, exports, myCheck) {
new myCheck.StringCheck();
});
----- or -----
var myCheck = require('check');
new myCheck.StringCheck();
Остались за кадром
Generics
function identity<T>(arg: T): T {
return arg;
}
var myIdentity: {<T>(arg: T): T} = identity;
Плюсы
Минусы
Карма MicroSoft
Продукт X
50 000 loc
5 лет
Только JavaScript
Продукт X
Постепенное улучшение вместо польной переработки
Размер имеет значение
10кб JavaScript
=>
11кб TypeScript
Compile
Uglify + Gzip
12кб Javascript
3кб Javascript
3кб Javascript
Плюсы
Минусы
Ломка при возвращении к JS
Спасибо за внимание
Собственно и всё