Dart, альтернатива Java для приложений смартфонов

Dart позволяет создавать мультиплатформенные приложения с синтаксисом очень классического языка.

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

Dart futur
Будущее - это никогда не то, чем оно было

Столкнувшись с фундаментальными проблемами дизайна в 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).

Синтаксис очень классический, если не сказать древний, близкий к JavaScript, созданному в 90-е и C, созданному им в 1972 году. Этот классицизм является преднамеренным. Однако предложенный язык предоставляет очень современные возможности.

Dart vs TypeScript

Сравнение синтаксиса двух кандидатов на фронтэнд в JavaScript (есть и другие).

Показывать «Привет, мир!».

Дарт

void main() {
  print("Salut le Monde!");
}

TypeScript

function main() {
   console.log("Salut le Monde!");
}
Объявить строку. Объявление TypeScript добавляет дополнительный тип.

Дарт

String str = "Hello en Dart";

TypeScript

var str : string = "Hello en TypeScript";
Тип переменной можно определить по выводу при объявлении Dart. В случае TypeScript это динамическая переменная.

Дарт

var str = "Hello en Dart";

TypeScript

var str = "Hello en TypeScript";
Объединить две переменные a и b... Dart повторяет принцип PHP, который в некоторых случаях более удобен.

Дарт

String x = "$a$b"

TypeScript

var x = a + b;
Структура if. Аналогично JavaScript

Дарт

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");
}
Структура коммутатора Dart похожа на структуру JS с дополнительными опциями. В Dart каждый пункт должен заканчиваться разрывом, непрерывностью, троу или возвращением, если он не пуст. В этом случае она объединяется со следующей. Аналогичное влияние может быть оказано на непустую статью с продолжением, которая выполняет переход к статье, если она имеет формулировку.

Дарт

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]);
}
Для... Ич. Работает на коллекциях как JS.

Дарт

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)
  ...
}
Петля. Похожий на JS.

Дарт

int x;

while(true) {
  x++;
}

do {
  x++;
} while(true);

TypeScript

var x: number

while(true) {
  x++;
}

do {
  x++;
} while(true);
Объявление функции. Функция может иметь динамические аргументы, что аналогично множественному dispatch, но не приносит той же скорости.

Дарт

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);
}
Класс и наследие. Оба языка проще JavaScript, но реализация Harmony даст последним те же возможности. Оба языка реализуют интерфейс, в то время как Harmony предлагает абстракции с прокси.

Дарт

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 для запуска программы.

Чтобы идти дальше...

Инструменты

Документы и ресурсы

См. также...

Programming and датировал languages - Asm.js - - Бейсик - C - C++- - C # - Дарт - Эйфель- - Го - Ява - JavaScript- Джулия- - Паскаль- PHP- - Питон - Пролог - - Руби - - Ла СкалаСкриптолСвифт TypeScriptHTMLВасмXMLXAML SQL