javascript in big project
TRANSCRIPT
![Page 1: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/1.jpg)
1Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
What`s wrong with JavascriptEvgeny GusevDate (03/02/2016)
![Page 2: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/2.jpg)
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}
![Page 3: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/3.jpg)
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}
![Page 4: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/4.jpg)
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()
![Page 5: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/5.jpg)
5Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JavaScript problems
➔ Знания размазаны по коду или сосредоточены в голове
![Page 6: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/6.jpg)
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;}
![Page 7: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/7.jpg)
7Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JavaScript problems
➔ Знания размазаны по коду или сосредоточены в голове
➔ Большое желание (и возможность) написать
костыль
![Page 8: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/8.jpg)
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(){};
![Page 9: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/9.jpg)
9Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JavaScript problems
➔ Знания размазаны по коду или сосредоточены в голове
➔ Большое желание (и возможность) написать костыль
➔ Слабая поддержка ООП
![Page 10: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/10.jpg)
10Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
JavaScript problems
➔ Знания размазаны по коду или сосредоточены в голове
➔ Большое желание (и возможность) написать костыль
➔ Слабая поддержка ООП
➔ Проблема с изоляцией и модульностью
![Page 11: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/11.jpg)
11Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Summary: JS is too weak
![Page 12: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/12.jpg)
12Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Solution: Dart
![Page 13: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/13.jpg)
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(){ //...}
![Page 14: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/14.jpg)
14Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Dart benefits: typing. Good analysis
![Page 15: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/15.jpg)
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(); }}
![Page 16: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/16.jpg)
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()}';}
![Page 17: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/17.jpg)
17Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Dart benefits
➔ Богатая стандартная библиотека (пакетный менеджер, сборщик etc.)
➔ Скорость работы
➔ Не только JS разработчики могут писать код
➔ Выкидывает лишний код, а значит быстрее грузится
![Page 18: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/18.jpg)
18Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Dart vs TypeScript
![Page 19: Javascript in big project](https://reader031.vdocuments.pub/reader031/viewer/2022021919/588110041a28ab22368b70c7/html5/thumbnails/19.jpg)
19Javascript in big project, Evgeny Gusev, 03.02.16 slide Wrike
Q&A