Dart, альтернатива Java для приложений смартфонов
Dart позволяет создавать мультиплатформенные приложения с синтаксисом очень классического языка.
Этот язык Google доступен на сайте dart.dev. Его можно использовать на Android вместо Java или на iOS.
В ней есть настоящие классы и реализуется конкуренция в виде общающихся субъектов со своей средой.

Будущее - это никогда не то, чем оно было
Столкнувшись с фундаментальными проблемами дизайна в JavaScript, которые он считает несостоятельными с помощью прогрессивных улучшений, Google выбрала радикальное решение: полностью заменить язык другим, с синтаксисом, который убирает недостатки JS. Но JavaScript на самом деле интересный язык в его общем дизайне, это детали, которые оставляют желать лучшего, и Dart, к сожалению, также отказывается от этого инновационного дизайна, чтобы вернуться к классике.
В браузере существует еще одно лучшее решение - разрешить использовать любой язык программирования на фронтэнде к байтекоду - роли, которую сейчас выполняет WebAssembly.
Google обещает, что программирование в Dart станет интерактивным благодаря предоставленным инструментам, мы сможем редактировать и запускать программу напрямую, а также изменять код по результатам. Для веб-приложения это было бы огромным преимуществом.
Программы могут быть эволюционными. Это может начинаться со скрипта с динамическими переменными, который может превратиться в приложение, куда будут добавлены типизированные переменные и классы.
Dart соревновалась с SoundScript (также от Google), режимом JavaScript, который поддерживает типизированные переменные и другие функции для повышения производительности, при этом убирая недостатки JS.
Google отказалась от внедрения виртуальной машины Dart в браузер Chrome в 2015 году. Но Dart всегда можно скомпилировать в JavaScript как TypeScript. Google использует Angular 2 Dart для некоторых из этих внутренних проектов, даже если Angular по умолчанию работает под управлением TypeScript.
Dart позволяет делать мобильные приложения для Android и iOS с Flutter в качестве интерфейса, а также является языком программирования Android (или Fuchsia), будущей ОС от Google, разработанной для безопасности, с также Flutter. Мы будем следить за развитием этого проекта.
Современная версия C с классами
Синтаксис языка Dart, созданного в 2011 году, более чем классический, он очень близок к синтаксису C (1972) и JavaScript (1995). Ее можно определить как упрощенную версию C++.
Программа Dart может быть запущена виртуальной машиной для локального или смартфонного приложения (Dart Native) или скомпилирована в JavaScript и таким образом создать код, который будет использоваться всеми браузерами (Dart Web).
- Функция main выполняет код после загрузки, а не по мере разбора страницы, как в JavaScript.
- Классы и интерфейса.
В отличие от JavaScript (до ECMAScript 6), Dart позволяет объявлять классы и имеет простое наследование. Он не позволяет перегружать методы. - Функции.
Функция заявляет себя как в C (а не с ключевым словом function, как в JavaScript), за исключением того, что тип возврата необязателен. Если он не указан, он динамичен.
Как и в JavaScript, функции можно вложить в другие функции. - Дополнительные типы.
Программист может использовать динамические переменные для сценария или переменные, типизированные для безопасности в более крупном проекте или для более высокой скорости выполнения. - Асинхронный. Можно начать асинхронные операции с авейтом или обещаниями, которые здесь называют «Будущее».
- Конкурент.
Объекты с именем Isolates могут работать в условиях конкуренции. Они передают сообщение, но имеют чистое пространство памяти.
Так что язык не многопоточный, а имеет параллельные процессы, виды актеров. - Символ + используется для сложения или конкатенации. Его также можно перегружать классными методами.
- Упрощенная автодокументация.
- Как и на языке Script, имя не должно объявляться локально в блоке, когда оно уже существует в контейнерном блоке (здесь мы получаем предупреждение, в Script это синтаксическая ошибка).
- Объект является публичным (может использоваться вне библиотеки) или закрытым, в этом случае он обозначается кодом подчеркивания . В
- классах могут быть геттеры и сеттеры. Синтаксис:
тип имени => выражение. - Метод может быть статическим. После этого она объявляется с приставкой static. То же самое и с атрибутом.
- Операторы - это операторы JavaScript. Это включает в себя = = и! = = для строгих сравнений .
- Как и в PHP, можно интегрировать переменные в строки символов с приставкой $.
- Зарезервированные слова:
абстракция, ассетт, асинхронный, await, случай, catch, class, продолжение, до, исключение, extends, factory, false, for, future, get, if, import, in, include, is, library, negate, operator, proxy, set, source, static, switch, throw, try, true, typedef, until, while - Список предустановленных типов и объектов :
bool, Date, double, Duration, int, list, map, num, Isolate, Object, Math, Pattern, Queue, RegExp, String, var, void. - Миксин
Класс, который может быть включен в другой класс для формирования составного объекта. В отличие от простого здесь наследства, а не множественного, в один класс можно включить несколько миксинов (см. словарь). - Снимок.
Снимок - это форма устойчивости состояния программы. Его данные записываются на жесткий диск для использования в следующем сеансе. Это позволяет мгновенно перезапустить программу, как будто она находится в режиме ожидания. (Текущая документация об этом не говорится, но код снимка является частью кода виртуальной машины). - Стримы.
Функциональное реактивное программирование добавляется с потоками, которые автоматически обновляют переменную, объявленную зависимой от значения других переменных и событий. - СИМД.
Инструкции, работающие параллельно. - Асинк и был. (1.9).
Позволяет в функции последовательно обрабатывать последовательность команд, результат которой ждет обработки. Дождитесь результата, прежде чем продолжить. - Будущее: .then - это своего рода обратный звонок. Это определяет функцию, вызванную при выполнении обработки .
- Перечисление. (1.9).
Синтаксис очень классический, если не сказать древний, близкий к JavaScript, созданному в 90-е и C, созданному им в 1972 году. Этот классицизм является преднамеренным. Однако предложенный язык предоставляет очень современные возможности.
Dart vs TypeScript
Сравнение синтаксиса двух кандидатов на фронтэнд в JavaScript (есть и другие).
Дарт
void main() {
print("Salut le Monde!");
}
TypeScript
function main() {
console.log("Salut le Monde!");
}
Дарт
String str = "Hello en Dart";
TypeScript
var str : string = "Hello en TypeScript";
Дарт
var str = "Hello en Dart";
TypeScript
var str = "Hello en TypeScript";
Дарт
String x = "$a$b"
TypeScript
var x = a + b;
Дарт
if (x == 1) {
print("1");
} else if(x == 2) {
print("2");
} else {
print("x");
}
TypeScript
if (x == 1) {
console.log("1");
} else if(x == 2) {
console.log("2");
} else {
console.log("x");
}
Дарт
var x = "x";
switch(x) {
case "a":
print("a");
break;
case "b":
case "c":
print("b ou c");
break;
default:
print("x");
}
TypeScript
var x = "x";
switch(x) {
case "a":
console.log("a");
break;
case "b":
case "c":
console.log("b ou c");
break;
default:
console.log("x");
}
Дарт
var str = "demo";
for(var i = 0; i < str.length; i++) {
print(str[i]);
}
TypeScript
var str = "demo";
for(var i = 0; i < str.length; i++) {
console.log(str[i]);
}
Дарт
var arr = [ 1,2,3 ];
for(var x in arr) {
print(x);
}
TypeScript
var arr = [ 1,2,3 ];
for(var x in arr) {
console.log(x)
...
}
Дарт
int x;
while(true) {
x++;
}
do {
x++;
} while(true);
TypeScript
var x: number
while(true) {
x++;
}
do {
x++;
} while(true);
Дарт
String catstr(String str) {
String x = "Message : $str";
return x;
}
print(catstr("Hello"));
// On peut omettre le type.
add(a, b) {
return(a + b);
}
TypeScript
function catstr(str : string) : String {
var x : string = "Message : $str";
return x;
}
console.log(catstr("Hello"));
// On peut omettre le type.
function add(a, b) {
return(a + b);
}
Дарт
class Vehicule {
int carburant;
int passagers;
Vehicule(int this.vitesse, int this.passagers) {
}
int distance() {
return(this.carburant / this.passagers);
}
}
class Voiture extends Vehicule {
int puissance;
}
TypeScript
class Vehicule {
carburant : number;
passagers : number;
constructor(vitesse : number, passagers : number) {
}
distance() {
return(this.carburant / this.passagers);
}
}
class Voiture extends Vehicule {
puissance : number;
}
Оба языка похожи и отличаются в основном инверсией типа и идентификатора для TypeScript - синтаксиса, восходящего к языку Паскаля! Этот синтаксис используется Google для языка Go, который за 2 года до Dart.
Возможности Dart превосходят возможности TypeScript, но они совместимы только с серверной версией. А Dart, скомпилированный в JavaScript, работает только на недавних браузерах, а не на IE9, например.
Dart и браузеры, WebAssembly
Существовала версия Chrome под названием Dartium, которая включала виртуальную машину Dart, но Microsoft и Apple не захотели интегрировать этот язык в свой браузер.
Apple далеко не хочет продвигать веб-приложения, и сообщество, занимающееся разработкой Webkit, отказалось от его реализации на том основании, что оно не входит в веб-стандарты. То же самое и со стороны Mozilla, где считалось, что будущая версия JavaScript может добавить те же улучшения, что и Dart, в частности модель классов и типизированные переменные. Речь не идет о Microsoft, которая дала отрицательный отзыв на эту тему, к тому же Microsoft выбрала другой вариант с TypeScript.
Наконец даже Google отказалась в марте 2015 года от его реализации на Chrome .
По мнению авторов, Dart не будет компилироваться в WebAssembly, которая скорее является целью для статических языков вроде C или C++. Для этого необходимо, чтобы wasm стал эквивалентом JVM или CLR.
Зачем пользоваться Дартом ?
Главным недостатком Дарта был тактический, а не технический порядок. Позиционировать себя как альтернативу JavaScript было его ошибкой. Но после решения (в марте 2015 года) не внедрять виртуальную машину в браузер и, скорее, компилировать только Dart в JavaScript, этот недостаток сейчас снимается.
Этот язык особенно подходит завсегдатаям C и C++: синтаксис похож, хотя и немного модернизирован.
Он может заменить PHP или Node.js на сервере и быть скомпилирован в JS для браузера, но для этого второго использования, вероятно, лучше всего использовать TypeScript.
Особенно он подходит для создания приложений на Android и iOS с фреймворком Flutter. Это дает преимущество одного языка на всех платформах. По сравнению с React Native и Node на мобильных устройствах его преимущество, помимо скорости, в сопутствующих инструментах разработки.
Пример сценария в Dart
Для начала загрузите архив в формате zip на сайт, а содержимое поместите в каталог, например, c :\dart (он работает только в Windows).
Ты можешь запустить редактор Dart и создать проект, но потом оказываешься лицом к лицу с большим количеством файлов, включающих сервер, который нельзя использовать, не изучив руководство всерьез. Для начала проще пройти через командную строку. В редакторе кода введите:
main() {
print("Hello World!");
}
Сохраняйте сценарий в файле hello.dart в любом каталоге, например в dart. Сценарий запускается с помощью команды:
c:\dart\dart-sdk\bin\dart hello.dart
Это покажет Hello World!
Если вы хотите продолжить с языком, чтобы добавить его путь к переменной Windows PATH, то достаточно будет ввести dart для запуска программы.
Инструменты
- Попробуйте онлайн-язык. Введите онлайн-код. Чтобы проверить приведенные выше примеры, необходимо поместить код в функцию руки или добавить функцию руки. Все они были проверены.
- Трепыхаться. Инфраструктура скриптинга в Dart для создания быстрых приложений для Android или iOS.
Документы и ресурсы
- Дарт.дев. Описание и спецификации языка и загрузки для Windows. Также доступен специальный редактор.
- ECMA 408. Стандартная спецификации.
См. также...
- JavaScript и Harmony. Как развивается язык. 6-я версия ECMAScript несет основную часть функций Dart.
- Как не создать новый язык программирования. Является ли вечный синтаксис C лучшим ?