Главная » Статьи » Dart для программистов JavaScript

Dart для программистов JavaScript

Dart для программистов JavaScript

От автора: это мое личное восприятие того, как Dart быстро превратился из языка, на котором я должен был научиться создавать что-то с помощью Flutter, в язык, которым я люблю пользоваться каждый день.

Когда вы начинаете с работать Flutter, вы часто слышите, что Dart похож на JavaScript. Ну, это в принципе так… за исключением тех случаев, когда это не так. Я подумал, что было бы полезно выделить некоторые тонкие отличия между Dart JavaScript, чтобы упростить задачу разработчикам, когда им нужно будет переключаться с одного языка на другой.

Условия должны иметь статический тип ‘bool’

В дополнение к типам, Dart вообще более строгий язык. В JavaScript вы можете использовать любое «истинное» значение в условном выражении. Например:

var name = 'Joe';
if (name) { // делаем что-то...

Если вы попробуете эквивалентный код в Dart, вы увидите предупреждение “Conditions must have a static type of ‘bool’”. Причина в том, что Dart требует, чтобы условие было bool true, а не просто «истинным» значением. Вы можете исправить код, изменив его на:

if (name.length > 0)

Но предпочтительный подход заключается в следующем:

if (name.isNotEmpty)

В связи с этим в Dart нет тройных символов равно (===). В качестве отступления, я увидел этот отличный совет в Twitter — использовать тот же analysis_options.yaml, что и команда Flutter. Это очень помогло освоить с лучшие практики Dart в целом.

Где console.log?

Хотя я постоянно пытаюсь научиться полагаться на отладчик, старые привычки тяжело умирают. Вместо console.log вы можете использовать print. Dart поддерживает интерполяцию строк, так что там, где в JavaScript вы можете написать:

console.log('Name is %s', name);

в Dart используйте:

print('Name is $name');

Если вам нужно получить доступ к свойствам переменной или вызвать функции, вы можете заключить ее в фигурные скобки.

print('Length is ${name.length}');

Параметры функции

Это одна из областей, в которых, мне кажется, JavaScript и Dart отличаются сильнее всего. Dart предоставляет гораздо более мощную реализацию, но для адаптации может потребоваться некоторое время.

Этот ответ на StackOverflow от Сета Лэдда отлично объясняет различия. В общем в Dart вы можете передать параметры в заданных позициях:

getFullName('John', 'Doe');

Или вы можете передать их по имени:

getFullName(firstName: 'John', lastName: 'Doe');

Для конструкторов вы можете использовать this.fieldName, чтобы сообщить Dart, что переданное значение должно быть присвоено свойству.

Contact(this.firstName);

Обработка массивов

Массивы в основном обрабатываются одинаково, но есть несколько отличий, на которые стоит обратить внимание. Ключевым отличием является то, что вы добавляете элемент в массив, вызывая add, а не push.

Dart предоставляет вспомогательные методы first и firstWhere, которые, как вы могли догадаться, возвращают первый элемент в массиве. Менее очевидно, что по умолчанию, если совпадение не найдено, методы выдают ошибку. Вы можете обработать этот случай, указав значение для orElse, которое будет возвращено, если элемент не найден.

Final и Const

На то, чтобы разобраться с эти, у меня ушло какое-то время. Я думаю, что этот пост лучше всего объясняет различия, которые я обнаружил. Ключевое различие между final и const заключается в том, что final описывает переменную, а const описывает само значение. Окончательная переменная может быть установлена только один раз, но значение, на которое она указывает, может быть изменено, значение const заморожено и не может быть изменено.

Еще один хороший совет относительно использования файла Flutter analysis_options — используйте конструкторяы const, где это возможно, при создании виджетов. Это может оказать большое влияние на производительность приложения, позволяя платформе кэшировать виджеты.

Толстая стрелка

«Толстая стрелка» или => может использоваться для однострочных функций. Например, вместо:

someField: () { return true;
},

Вы можете написать:

someField: () => true,

Вроде бы небольшая разница, но она определенно может оказать положительное влияние на читаемость кода.

Заключение

Подводя итог, стоит упомянуть еще несколько моментов.

Чтобы преобразовать значение (например) в double, вы можете использовать double.parse или double.tryParse. Первый выдаст ошибку, если не проходит, а второй нет.

Вы можете использовать нулевые операторы (например, contact? .FirstName), чтобы упростить обработку нулевых значений.

Автор: Hillel Coren

Источник: https://medium.com/

Редакция: Команда webformyself.