Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
во первых по тому что компактные исходники быстрее за грузятся
Во вторых потому что в JavaScript нет статической типизации и написать IDE которая будет делать автоподстановку как минимум затруднительно
var MyNan = 0/0;
// Keys in Dart must be string literals
var periodic = {
'gold' : 'AU',
'silver' : 'AG'
};
var a = ['apple', 'banana', 'cherry'];
// returns null
a.add('donut');
// == null
// Queues are optimized for removing items from the head
// calculations can be performed in string interpolation
element.style.top = '${top + 20}px';
// Dart ignores the first new-line (if it is directly after // the quotes), but not the last. var string = ''' This is a string that spans many lines. ''';
// Dart specifies optional parameters with square braces fn(a, [b, c]) => c;
Очень не хватает интерпретируемого языка вроде js, ruby, python но с жесткой типизацией, чтобы с привычной легкостью писать на нем что-то надежное.очевидно-минималистичным, максимум float > int. Без сюрпризов// calculations can be performed in string interpolation
element.style.top = '${top + 20}px';// Dart ignores the first new-line (if it is directly after
// the quotes), but not the last.
var string = '''
This is a string that spans
many lines.
''';var loudify = (msg) => msg.toUpperCase();
loudify('not gonna take it anymore'); // NOT GONNA TAKE IT ANYMOREclass Person {
var name;
Person(this.name);
greet() => 'Hello, $name';
}Object
.getOwnPropertyNames(Math)
.forEach(function(method) {
var descriptor = Object.getOwnPropertyDescriptor(Math, method),
value = descriptor.value;
if (typeof value !== 'function') return;
// var func = method.bind(Math); // это не нужно Math - своеобразный namespace
descriptor.value = function () {return value(this)};
Object.defineProperty(Number.prototype, method, descriptor);
});
[(-1).abs(), 144..sqrt()]Все это конечно напоминает изыски PHPЧем это вам напоминает изыски PHP? Мне это Perl напоминает куда больше.
// Dart string objects have a built-in startsWith method
'racecar'.startsWith('race'); // == true
'racecar'.startsWith('pace'); // == false
// JavaScript has no built-in startsWith function
// и своё расширение прототипа
?// Javascript
'racecar'.indexOf('race') === 0 ; // == true
'racecar'.indexOf('pace') === 0; // == false
.var element = document.createElement('p');
element.innerHTML = 'A quick brown fox.';var element = new Element.html('A quick brown fox.');/code>
или что-то существенней имели в виду?а в JS каждая либа делает свой ООП. Давно уже хочется нативный ООП, а не очередные костыли.((){})() // == returns null
int foo( int param ) {}
trmplate T square( T v ) { return v * v; }
double v1 = square( 5 ); // 25
const char* v2 = square( "five" ); // compile error
Т.е. метод возвращает что-то разумное или программа не запускается. Разница очень есть.«Одна из офигеннейших фишек JS это возможность в любой момент расширить прототип любого объекта.»
Array.prototype.pop = null;
class Point {
int getX() { return this.x; }
};
class OtherPoint : Point {
int getX() { return null; }
};
....
void fun(Point p) { print p.getX(); }
fun(new OtherPoint(10)); // оппа
Да ладно! например написав на C такое:
int foo( int param ) {}
я уверен что param это целое число, и оно передано. Не надо проверять его на defined и прочее.
public void method (MyObject object) {
object.doSomething();
}
public void method (MyObject object) {
if (object == null) {
throw new MyObjectExceptions('cannot be null');
}
object.doSomething();
}
method: function (object) {
if (!object || typeof object.doSomething == 'function') {
throw new Error('Duck typing is failed');
}
object.doSomething();
}
method: function (object) {
ensureMethod( object, 'doSomething' );
object.doSomething();
}
void utilize_object( A o ) { o.init(); i.do_something(); o.deinit(); }
utilize_object( new A );
utilize_object( new B ); // B extends AВ JavaScript нет, т.к. объект имеющий все нужные методы, может подразумевать совсем другие соглашения по работе с ним, например, необходимо вызвать метод init_external() до init().
В JavaScript нет, т.к. объект имеющий все нужные методы, может подразумевать совсем другие соглашения по работе с ним
function iAmSureObjectHasPushMethod(array){
if(array && typeof array.push == 'function'){
array.push(«asd»);
}
}
public void iAmSureIworkWithArray (Array array){
array.push('asd'); //NullPointerException
}
В Java вы точно не знаете, в каком коде вы исполняетесь, какой версии, что стоит у пользователя. И если у пользователя нету какого-то метода вам никак не получится его использовать, в то время, как в JS этот метод можно динамически подмешать.
В наследовании на классах сторона ИМЕЕТ гарантию на объект. Так вот не во всех языках наследование от базового класса гарантирует, что сигнатура его публичных методов не изменится. Классической перегрузки (несколько методов с одним именем, но разным набором параметров, доступных клиентам) там нет, объявляем метод с другой сигнатурой (то же имя, но другой набор параметров) и новый метод замещает старый для клиентов, к старому можно обратится только внутри наследника через конструкцию типа parent::method. Явно привести наследника к родителю тоже нельзя.так как существует такое понятие как ... интерфейсыОдна из офигеннейших фишек JS это возможность в любой момент расширить прототип любого объектаНе фиксированные объекты — это одна из причин тормозов. Фича, на самом деле сомнительная, но так истоически сложилось, что ее используют для Polyfill'ов и она эффективна.
А в dart нужно будет танцевать с бубном.Сейчас есть одна реализация Dart так что не будем.

Google запустила сайт для разработчиков: JavaScript vs. Dart