1 Javascript in big project, Evgeny Gusev, 03.02.16 slid e Wrike What`s wrong with Javascript Evgeny Gusev Date (03/02/2016)
1Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
What`s wrong with JavascriptEvgeny GusevDate (03/02/2016)
2Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JavaScript problems
// data.jsfunction getData(){ var dataFromServer = getServerData(); // some logging return dataFromServer;}
// some other filevar data = getData();if (data.userIsAdmin) { // make some stuff}
3Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JavaScript problems
// data.jsfunction getData(){ var dataFromServer = getServerData(); // some logging return dataFromServer;}
// some other filevar data = getData();if (?????) { // make some stuff}
4Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JsDoc = решение?
/*** @typedef Data* @type Object* @property {userIsAdmin} user has admin rights*/
/*** Used to collect data from different sources** @public* @returns {Data} Function returns Data object*/function getData()
5Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JavaScript problems
➔ Знания размазаны по коду или сосредоточены в голове
6Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JavaScript problems
function getData() { var dataFromServer = getServerData(); if (dataFromServer.sessionExpired) { dataFromServer.status = 'expired'; } return dataFromServer;}
7Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JavaScript problems
➔ Знания размазаны по коду или сосредоточены в голове
➔ Большое желание (и возможность) написать
костыль
8Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JavaScript problemsfunction PersonInterface(proto,fnName){ setTimeout(function(){ if(typeof proto.getSurName !== 'function'){ throw new Error(fnName + ' has to implement getSurName'); } },100);}
function implements(fn, implements,fnName){ implements(fn.prototype,fnName);}
function Employer(){};implements(Employer, PersonInterface,'Employer');Employer.prototype.getSurName=function(){};
9Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JavaScript problems
➔ Знания размазаны по коду или сосредоточены в голове
➔ Большое желание (и возможность) написать костыль
➔ Слабая поддержка ООП
10Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JavaScript problems
➔ Знания размазаны по коду или сосредоточены в голове
➔ Большое желание (и возможность) написать костыль
➔ Слабая поддержка ООП
➔ Проблема с изоляцией и модульностью
11Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Summary: JS is too weak
12Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Solution: Dart
13Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Dart benefits: typing. Self-documented
class Data{ bool userIsAdmin; // some other fields}
Data getData(){ //...}
14Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Dart benefits: typing. Good analysis
15Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Dart benefits: isolates
library 'myAwesomeLibrary'
import 'package:logging/logging.dart' show Logger, Level, LogRecord;import "package:test/test.dart" as test;
export "package:utils/utils.dart";
class MyClass{ MyClass(){ test.Runner.begin(); }}
16Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Dart benefits: OOPabstract class Person { final _name; Person(this._name); String greet(who);}
class Human { int getAge () => 14;}
abstract class FruitLover { String getWhatILike () => 'Banana!';}
class Developer extends Human with FruitLover implements Person { final _name; Developer(this._name); @override int getAge () => 23; String greet(who) => 'Hi $who. I am $_name, ${getAge()} years old, i like ${getWhatILike()}';}
17Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Dart benefits
➔ Богатая стандартная библиотека (пакетный менеджер, сборщик etc.)
➔ Скорость работы
➔ Не только JS разработчики могут писать код
➔ Выкидывает лишний код, а значит быстрее грузится
18Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Dart vs TypeScript
19Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Q&A