Язык программирования dart: Хочу всё знать: язык Dart | GeekBrains

о том, как мы пишем на языке, который ежегодно «хоронят» (часть 1) / Блог компании Wrike / Хабр


«А он еще не умер?»,- спрашивают нас про Dart на каждой фронтенд-конференции. «А как Google поддерживает язык?», «как вы нанимаете разработчиков в команду?», «а почему не TypeScript, если вам нужна типизация?»

Мы решили объединить наиболее частые вопросы и задать их в интервью Игорю Демьянову, менеджеру по разработке Wrike.

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

Игорь, продукту уже больше 10 лет, а что было до того момента, как вы начали использовать Dart для разработки фронтенда Wrike?

До Dart мы писали на ExtJS 3 и частично на ExtJS 4. Плюс у нас был небольшой самодельный фреймворк, который написал один из бывших сотрудников. Этот «велосипед» нам сейчас скорее мешает, и мы от него потихоньку избавляемся. На данный момент в проекте более 2,5 млн строк клиентского кода, новый функционал мы уже года два пишем на дарте и потихоньку избавляемся от легаси на ExtJS.

В какой момент и почему пришло понимание, что надо переставать писать на JS?

Оно пришло, когда Wrike начал активно расти. Когда у нас в команде было 11 человек — мы еще как-то могли использовать JavaScript, более-менее понимать, кто какой код пишет, помнить все нюансы старого кода. Но сейчас в команде фронтенда у нас около 50 человек, разработчики распределены более чем по 10 scrum-командам, и правило личных договоренностей уже не работает. Задач много, разработчиков много, кода много.

Много кода — это сколько?

На клиент мы в данный момент грузим около 10 мегабайт сжатого кода, раньше было 5 или 6. И раньше эта цифра выглядела страшно, сейчас и подавно. Но мы тут ничего не можем сделать -продукт активно растет функционально. Разумеется, мы стремимся, чтобы отдельные куски кода грузились по требованию, но в каких-то случаях приходится подгружать весь код сразу, чтобы весь функционал Wrike был доступен клиенту мгновенно.

Так а почему Dart?

Dart выгодно отличается от всего остального тем, что он может выкидывать неиспользуемые части кода, это и позволяет нам жить с таким огромным легаси. Когда проект большой и разработчиков много, очень сложно контролировать, что ты используешь, а что нет. Есть код, который лежит в кодовой базе — может быть, его просто кто-то забыл выкинуть из общей сборки — и он все еще живет с нами. И если бы мы использовали JS с его сборщиками, этот код точно приходил бы на клиент. А Dart позволяет оптимизировать и выпилить ненужный код. Плюс мы не зависим ни от каких стандартов JS, которые постоянно меняются и обновляются. Кода ты делаешь enterprise-продукт, очень сложно выбить у бизнеса время на перевод с одного стандарта на другой.

Выбрав Dart, мы пошли по пути медленной миграции: вначале переписали корную часть, затем — остальной функционал. Сейчас у нас уже грузится нового кода больше, чем старого. При этом продукт активно развивается и новые фичи приходится делать очень быстро.

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

Да, сейчас примерно эти же возможности есть у Typescript или JS+Flow, но нам нравится Dart. У языка простой и понятный синтаксис, а главное — он позволяет нам концентрироваться на идеях, экономить время, которое бы мы тратили на рефакторинг или, скажем, на переход с ES5 на ES6, фреймворки и т.п.

Сейчас ведется какая-то разработка компонентов продукта на JS?

В отдельных исключительных случаях мы можем вносить изменения в легаси-код на JS, если видим какой-то critical bug. В остальных случаях пишется новый код на Dart — он либо заменяет старый код, либо добавляет новый функционал.

Какой фреймворк вы используете?

Примерно год назад мы перешли с Polymer на Angular2. Сейчас планируем переход на Angular3, а к концу года — на Angular4. Во многих компаниях бизнес в этом отношении довольно тяжело идет навстречу R’n’D — такие миграции сопровождаются долгими спорами и убеждениями. То, что мы используем самые новые инструменты — не только заслуга фронтенд-разработчиков, но и наших тестировщиков-автоматизаторов, которые хорошо помогают нам с регрессионными тестами и QA Manual. Когда мы переходили на Dart, то получили поддержку всех технических команд Wrike, поэтому этот переход нам дался относительно безболезненно. Так же и с Angular — прогнозируем, что переход между версиями затянется на 1-2 месяца, вряд ли больше.

Сейчас мало знают о языке Dart, но 2 года назад информации же вообще не было. Как вообще вам удалось по живому в работающем проекте все переделать? Трудно представить, что бизнес на это вообще пошел.

Я сам начал использовать Dart с версии 0.8, когда он был еще только в бете. На момент внедрения в Wrike Dart уже был официально зарелижен, появилась спецификация, стандарты и т.п., то есть мы были уверены, что принципиально в языке ничего не будет меняться. Мы знали, с каким языком будем иметь дело, все проанализировали и получили первые результаты, которыми смогли аргументированно доказать необходимость изменений. Главным доводом в пользу дарта был Tree Shaking — умение дарта выпиливать неиспользуемый код вплоть до методов. А это при нашем объеме legacy критично.

Почему не TypeScript?

Если бы мы, допустим, портировали Wrike на TypeScript, это было бы, наверное, «дешевле». С другой стороны, у нас столько кода, что портирование на TS, нам скорее всего ничего бы не дало — остался бы тот же объем подгружаемого легаси, только на TypeScript. Dart же заставляет нас писать лаконично и правильно, и не дает допустить простых ошибок в проектировании, это его плюс, но в этом, конечно, и его строгость.

Если вернуться к бизнесу, то да, здесь мы получили поддержку. Наш CEO Андрей Филев — сам в прошлом разработчик, и разговор с ним можно вести на одном языке. Плюс, репутация Google как разработчика языка о многом говорит. В конце концов, эти изменения были необходимы и самому бизнесу, чтобы максимально быстро разрабатывать и выпускать фичи, позволяющие нам оставаться одними из лидеров рынка. В общем, бизнес поддержал, и сейчас мы очень быстро движемся, а бизнес доволен нашей скоростью.

Но вот те 11 человек, которые писали на JS и вынуждены были переходить на Dart, наверно, не так радостно восприняли эту новость?

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

Сейчас в JavaScript-мир довольно низкий порог вхождения, очень много в сообществе новичков, которые осваивают язык, но едва ли понимают, как проектируются большие продукты. У моего коллеги Евгения Гусева есть доклад на эту тему, который не так давно вызвал немалую полемику среди JS-разработчиков.

Любой язык можно рассматривать только в контексте его применения, поэтому тут споры и холивары бессмысленны. Например, JavaScript всем хорош для прототипирования — как бы вы ни написали код на JS, вы его скорее всего запустите. Нет понятия “плохой JavaScript” — либо он работает, как вам нужно, либо он работает не так, как вам нужно, и все.

С Dart сложнее. У вас, как в Java и как в .net, есть анализатор, который вам говорит: «Знаешь, дружок, как бы не так. Так нельзя делать. Нельзя создавать динамические классы и т.п.». То есть язык просто не позволит самому себе выстрелить в ногу, как бы вы ни хотели.

Если вы посмотрите, многие создатели Dart, работали с серьезными объекто-ориентированными языкам, V8 делали, даже кто-то из Java у них есть. Они подошли к проектированию языка с точки зрения больших приложений, поэтому Dart – это язык для средних, больших, и очень больших приложений. Он по дефолту предлагает одно, но самое эффективное решение, и оно идет «из коробки». Вы в один клик можете сделать отложенную загрузку/загрузку по требованию, язык сам будет «выпиливать», оптимизировать код – это те бонусы, которые нужны большим приложениям. На маленьких приложениях вы практически никакого заметного эффекта по сравнению с JS не увидите.

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

Мы будем благодарны за вопросы в комментариях и, если потребуется, напишем более подробные технические статьи о работе с Dart на их основе.

как правильно начать знакомство с языком? / Блог компании Wrike / Хабр

Всем привет! На прошлой неделе мы провели вторую ежегодную встречу русскоязычного сообщества Dart (ака Dartup) и получили очень информативную и полезную обратную связь от людей, пришедших на мероприятие. В этом году нас было около 130 человек. Если вы не были и хотите посмотреть, вот ссылка на записи. Спасибо за митап всем участникам, организаторам и партнерам.

Многие гости в кулуарах и в телеграм-канале, посвященном встрече, спрашивали нас, почему, обладая большой экспертизой в языке, мы до сих пор не задумались о Dart академии, вебинарах или хотя бы кратком руководстве для новичков. Признаюсь, чтобы начать такой процесс, нам нужен был импульс от вас. Мы его получили. Поэтому начинаем серию статей для тех, кто интересуется языком и хочет попробовать в нем разобраться. И если вам понравится и пригодится эта информация, то мы как компания сможем больше уделять этому времени.


Про что

Давайте начнем с базового плана:


  • Где узнать про Dart больше?
  • Как и где попробовать?
  • Настройка среды разработки
  • Запуск Hello world

Где узнать про Dart больше?

Как это ни страно, на https://www.dartlang.org. Также там есть мини-курс по синтаксису и возможностям языка. А так как Dart — это целая экосистема, то, как и в Java, надо изучить и стандартные библиотеки, для этого есть библиотечный тур. И если после прочтения вы всерьез заинтересовались возможностями языка — обязательно уделите внимание гайду Effective Dart — советы, изложенные в нем, помогут сделать ваш код высокоэффективным. Для тех, кто любит сухой язык API вместо текста, вот прекрасная ссылка.

Dart, как и JavaScript, стандартизирован ECMA-408, в этом документе достаточно подробно расписаны все нюансы языка.


Сферы применения

Дарт — язык универсальный. С его помощью можно создавать утилиты командной строки, серверные приложения, заниматься Web-разработкой и даже делать приложения для мобильных платформ. Ниже мы расскажем об этом подробнее.


CLI

CLI, весь тулинг дарта написан на самом языке. То есть pub, analyzer, dartdoc, dartfmt, dart2js — всё создано с использованием самого Dart, вы можете посмотреть исходники по ссылкам. Утилиты достаточно просто писать с учетом того, что есть мануал.

У нас на бэкенде в продакшне работает приложение, написанное на Дарте, оно использует БД и активно работает с сокетами. Также мы используем свои cli-утилиты для облегчения сборки или кодогенерации. Более подробно про разработку на DartVM можно прочитать тут.

Одной очень крутой особенностью DartVM является запуск отладчика и профилировщика, который входит в сам DartVM и называется Observatory. Как утверждает Google, отладчик практически не влияет на производительность исполняемого кода, при этом через данный инструмент нельзя подменить исполняемые исходники, но можно менять состояние.


Web

Тут всё довольно просто — вы можете использовать различные биндинги через js-interop к библиотекам js-мира. Да, нужно писать враперры, но Dart и JS — это разные миры, так что приходится платить за типизацию и поддержку кода.

Можно писать на чистом дарте без фреймворков или использовать космолёт AngularDart. В Wrike мы используем AngularDart на проде для основного продукта (в данный момент на чистом Дарте написано приложение, в минифицированном виде занимающее у клиента 15Мб), так что можем сказать, что он проверен временем и готов для боевых условий. И пусть вас не смущает версионность, пути между TS и Dart версией разошлись с версии 2.0 (еще раз: версии Angular для TypeScript и Dart — не совпадают!), сейчас это разные миры с похожим API.

Так же есть нативный redux и over_react.


Android/iOS

Dart предлагает единый подход разработки сразу на обе мобильные платформы — Flutter. Пока это альфа, но работает очень быстро и стабильно. В компании мы только начинаем делать на ней прототипы, поэтому пока большой экспертизой похвастаться не можем. Но, по предварительным оценкам, флаттер может пригодиться нам, чтобы унифицировать бизнес-логику и упростить разработку.

Минимальный размер приложения для Android в релиз моде весит около 5Мб + всё, что вы напишите сами. Вместе с флаттером Google продвигает инструменты для мобильной разработки, что делает её очень простой. Особенно хочется отметить фичу Hot Reload, которая делает разработку под мобильные устройства фантастической.


Как и где попробовать язык?


Online

Если вы не хотите ничего устанавливать и желаете просто «пощупать» язык, вам нужно зайти на DartPad, где можно пошарить код или загрузить примеры. Есть ограничение на подключение внешних пакетов, но стандартной библиотеки на первых порах хватит всем. При этом вы получаете полноценный редактор с подсветкой, ассистентом и выводом ошибок компилятора.


Offline

Для этого можно воспользоваться различными редакторами:


→ Подробная инструкция.

Каждый из них будет использовать dartanalyzer server, так что вы получите практически во всех редакторах одну и ту же поддержку функциональности.


Настройка среды разработки

Вам нужно поставить любой ваш любимый редактор, который поддерживает Dart.
Далее создать проект:


Любой путь использует пакет stagehand, тут каждый выбирает свой вариант. Для примера я буду использовать шаблон ‘Bare-bones Web App’, в котором не используется никакой фреймворк, всё написано на чистом Dart с использованием стандартной библиотеки ‘dart:html’ для манипуляции с дом-деревом.



После создания шаблона проекта необходимо загрузить все зависимые пакеты. Это делается одной простой командой:
pub upgrade

После исполнения команды у нас будет создано два файла
.packages — это файл с ссылками на пакеты.
.pubscpec.lock — это файл с конкретными версиями пакетов, которые разрезолвил pub.

В мире Dart pub выполняет роль пакетного менеджера, все доступные пакеты вы можете посмотреть тут. Также pub умеет публиковать пакеты, плюс есть еще две возможности, которые скоро уедут из pub — это сборка проекта и запуск http-сервера для запуска проекта в браузере, если мы пишем под веб.

Теперь запустим наш проект:

pub serve

Консоль:


После того, как все “телодвижения” в пабе завершатся, на экране появится адрес, через который можно открыть в браузере наш пример. Здесь вы столкнётесь с проблемой, что при открытии localhost:8080 pub снова запустит что-то внутри себя — это dart2js. Это займет еще немного времени — в зависимости от размера исполняемого кода. И тут мы подошли к главной причине, из-за которой Google убирает из pub функции serve, продвигая более быстрые решения на основе build_runner и Bazel, но о них в следующей статье.

Пока же мы можем запустить наш проект в режиме DDC, который делает сборку “инкрементальной” и быстрой.

pub serve --web-compiler=dartdevc

Консоль:


Чтобы не писать в консоли выбор компилятора каждый раз, достаточно разкомментировать или добавить в самый конец файла pubspec.yaml строки:

web:
  compiler:
    debug: dartdevc

Тогда при вызове комманды pub serve будет автоматически выбран нужный компилятор.

Если вам потребуется собрать бандл для продакшна, то достаточно вызвать

pub build

и вы получите всё что нужно для запуска приложения в папке build.

Пока на этом остановимся. Задавайте в комментариях вопросы и пишите предложения по поводу тем для будущих статей в этой серии. Буду рад ответить.


В следующих выпусках
  • Поговорим об Анализаторе и как его готовить.
  • Затронем проблему lint правил, чтобы код был красивый
  • Структура проекта или зачем нужна папка lib
  • Сборка: свои правила
  • Тесты и покрытие
  • Различные препроцессоры css (less, scss)
  • Спрайты SVG, PNG
  • Интернализация/Локализация проекта при помощи intl
  • Angular в проекте
  • Кодогенерация
  • Иммутабельные данные
  • Сериализация десериализация
  • Backend
  • Изоляты или как паралелиться, используя пакет isolate
  • Websocket и http request, передача данных между Client<->Server

Другие материалы русскоязычного сообщества Dart

Об опыте разработки на Dart

Как мы успешно создали медицинский сервис на новой для себя технологии.

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

От заказчика поступила задача на разработку приложения, которое позволяет более качественно построить общение между врачами и их пациентами. Идею создания этого стартапа продиктовала ему жизнь.

У нашего клиента серьёзно заболел отец. Семья тонула в огромном объеме информации о возможном лечении. Чтобы не упустить важных деталей во время консультаций, разговоры с врачами записывались на диктофон. Записи рассылались по электронной почте членам семьи для обсуждения и принятия решения о лечении. Такой подход для формирования «команды здоровья» оказался весьма эффективным и у нашего заказчика созрела идея создать приложение, которое автоматизирует все процессы.

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

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

Выбор технологий

Нам предстояло создать концепт приложения, его дизайн и разработать MVP.

Заказчик предложил использовать стек Google (Google Cloud, Google Firebase, Google Storage, Google Speech Recognition) и новый инновационный кроссплатформенный фреймворк для разработки мобильных приложений — Google Flutter.

Знакомство с Flutter

Flutter — это достаточно молодой SDK от Google с открытым кодом для создания мобильных приложений под IOS и Android. Используется язык Dart, который компилируется в бинарный платформенный код, и за счет этого приложения показывают высокую производительность.

До проекта Medcorder у нас был большой опыт разработки на React Native, поэтому идею создать продукт на мультиплатформенном фреймворке мы посчитали очень удачной. Заказчику была важна скорость реализации и гибкость к изменениям, поэтому фреймворк – это то, что нужно.

К моменту старта проекта Flutter находился в стадии Pre-alpha, что несло дополнительные сложности и риски, но мы загорелись новой технологией и идеей, согласились на вызов и начали работу.

В процессе работы Flutter очень динамично рос и менялся. Отдельным кунг­-фу было поддерживать инструментарий актуальным. Хорошо, что Инженеры Google сразу поставили цель максимально снизить порог входа в платформу, тщательно поработали над документацией и ресурсами для разработчиков.

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

  • Flutter for Android developers
  • Flutter for iOS developers
  • Flutter for React Native developers
  • Flutter for Xamarin.Forms developers
  • Flutter for Web developers

Это помогает провести аналогии, на живых примерах настроиться на новый лад.

За время разработки Flutter прошел путь от Pre-alpha до Release Candidate, который вышел в начале декабря 2018 года. Апгрейд на новые версии инструментария проходил достаточно сложно. И здесь нам очень пригодился опыт создания нативных мобильных приложений, так как разрешить некоторые зависимости можно было только хорошо понимая работу Gradle для Android и CocoaPods для IOS.

Сообщество и решение проблем

Из-­за молодости SDK возникало много проблем, в которые приходилось глубоко вникать. Сперва мы придумывали решения сами, но ситуация с сообществом менялась в лучшую сторону прямо на глазах.

Сообщество росло, многие ответы появлялись на Stack Overflow, или

Dart – Язык программирования, созданный Google / Хабр

Оглавление

1. Введение
2. Backend
2.1. Инфраструктура.
2.2. Доменное имя. SSL.
2.3. Серверное приложение на Dart.

3. Web
3.1. Заглушка «Under construction»

4. Mobile


Введение


Меня, Flutter-разработчика, знакомые часто спрашивают: «Что же такое язык Dart?». Качают головой со словами: «А вот Петя серьёзные транспорты на Java пишет, а в Яндексе вообще плюсы в проде…». Ну что ж, пожалуй, действительно, Dart далёк от практик «фабрик для создания фабрик» из Java. Однако если стоит задача реализовать клиентские приложения сразу для нескольких платформ, не утонув в потоке задач по синхронизации разработчиков разных целевых ОС; создать целостный UI, узнаваемый, но специфичный для Android, iOS и веб и в целом уложиться в адекватные бюджет и сроки, — здесь Flutter не имеет конкурентов. И эти вопросы стоят вдвойне если у вас… стартап.

Итак, легенда: некий стартап решил создать новый сервис… ну, например, для

обмена списками покупок

Такая себе идея для стартапа, я знаю, но если я выпущу ещё один ToDo лист в этот мир, мне будет стыдно 🙂

между пользователями сервиса. Цель стартапа — выпустить MVP за три месяца на трех платформах (плюс четвертая — сервер, конечно).

10 лет назад я бы сказал, что этот кейс не имеет решения и постарался бы держаться от него подальше, 3 года назад решением мог стать стек ReactNative/React/NodeJs, в 2020 году для этого есть Dart. Добро пожаловать в атмосферу разработки альфа версии сервиса, я постараюсь наглядно пройти и объяснить весь процесс разработки. Код всех приложений будет выложен в паблик. Комментарии, включая набросы и холивары, приветствуются. Спросить автора «по существу» или просто посоветоваться можно в Telegram канале нашего отдела.


язык программирования Dart | Дротик

  • Документы
  • Платформы
  • Сообщество
  • Попробуй Дарт
  • Получить дротик
  • Платформы
  • Сообщество
  • Попробуй Дарт
  • Получить дротик
  • Документы
  • Образцы и руководства
    • Образцы языков
    • Codelabs
      • Список кодовых лабораторий Dart
      • Шпаргалка по языку
      • Итерируемые коллекции
      • Асинхронное программирование
    • Учебники
  • Язык
    • Эффективный дротик
      • Обзор
      • Стиль
      • Документация
      • Применение
      • дизайн
    • Методы расширения
    • Звуковая нулевая безопасность
      • Обзор
      • Понимание нулевой безопасности
    • Эволюция
    • Спецификация
    • Тур
    • Система типов
  • Основные библиотеки
    • Обзор
    • Тур
    • Статьи
      • Введение в дротик: io
      • Создание потоков
  • Пакеты
    • Как использовать пакеты
    • Часто используемые пакеты
    • Создание пакетов
    • Публикация пакетов
    • Ссылка на пакет
      • Зависимости
      • Глоссарий
      • Соглашения о компоновке пакетов
      • Переменные среды паба
      • Pubspec файл
      • Устранение неполадок в пабе
      • Проверенные издатели
      • Управление версиями
  • Развитие
    • Futures, async, await
    • Совместимость
      • C взаимодействие
      • Взаимодействие с JavaScript
    • JSON
    • Потоки
    • Мобильные приложения
    • Командная строка и серверные приложения
      • Обзор
      • Начать
      • Написание приложений командной строки
      • Написать HTTP-клиенты и серверы
      • Библиотеки и пакеты
    • Веб-приложения
      • Обзор
      • Начать
      • Получать данные динамически
      • Низкоуровневое веб-программирование
        • Подключите Dart и HTML
        • Добавить элементы в DOM
        • Удалить элементы DOM
      • Развертывание
      • Библиотеки и пакеты
  • Инструменты и методы
    • Обзор
    • Редакторы и отладчики
      • IntelliJ и Android Studio
      • Код VS
      • Dart DevИнструменты
      • DartPad
    • Инструменты командной строки
      • Dart SDK
        • Обзор
        • дротик (новый инструмент дротик)
        • dart2js (продукт JS)
        • dart2native
        • дартанализатор
        • dartaotruntime
        • dartdevc (разработчик JS)
        • дартдок
        • dartfmt
        • паб
      • Другие инструменты командной строки
        • build_runner
        • веб-разработчик
    • Управление исходным кодом
      • Код форматирования
      • Что не делать
    • Статический анализ
      • Настройка статического анализа
      • Устранение типичных проблем
    • Тестирование и оптимизация
    .Документация по

    Dart | Дротик

    • Документы
    • Платформы
    • Сообщество
    • Попробуй Дарт
    • Получить дротик
    • Платформы
    • Сообщество
    • Попробуй Дарт
    • Получить дротик
    • Документы
    • Образцы и руководства
      • Образцы языков
      • Codelabs
        • Список кодовых лабораторий Dart
        • Шпаргалка по языку
        • Итерируемые коллекции
        • Асинхронное программирование
      • Учебники
    • Язык
      • Эффективный дротик
        • Обзор
        • Стиль
        • Документация
        • Применение
        • дизайн
      • Методы расширения
      • Звуковая нулевая безопасность
        • Обзор
        • Понимание нулевой безопасности
      • Эволюция
      • Спецификация
      • Тур
      • Система типов
    • Основные библиотеки
      • Обзор
      • Тур
      • Статьи
        • Введение в дротик: io
        • Создание потоков
    • Пакеты
      • Как использовать пакеты
      • Часто используемые пакеты
      • Создание пакетов
      • Публикация пакетов
      • Ссылка на пакет
        • Зависимости
        • Глоссарий
        • Соглашения о компоновке пакетов
        • Переменные среды паба
        • Pubspec файл
        • Устранение неполадок в пабе
        • Проверенные издатели
        • Управление версиями
    • Развитие
      • Futures, async, await
      • Совместимость
        • C взаимодействие
        • Взаимодействие с JavaScript
      • JSON
      • Потоки
      • Мобильные приложения
      • Командная строка и серверные приложения
        • Обзор
        • Начать
        • Написание приложений командной строки
        • Написать HTTP-клиенты и серверы
        • Библиотеки и пакеты
      • Веб-приложения
        • Обзор
        • Начать
        • Получать данные динамически
        • Низкоуровневое веб-программирование
          • Подключите Dart и HTML
          • Добавить элементы в DOM
          • Удалить элементы DOM
        • Развертывание
        • Библиотеки и пакеты
    • Инструменты и методы
      • Обзор
      • Редакторы и отладчики
        • IntelliJ и Android Studio
        • Код VS
        • Dart DevИнструменты
        • DartPad
      • Инструменты командной строки
        • Dart SDK
          • Обзор
          • дротик (новый инструмент дротик)
          • dart2js (продукт JS)
          • dart2native
          • дартанализатор
          • dartaotruntime
          • dartdevc (разработчик JS)
          • дартдок
          • dartfmt
          • паб
        • Другие инструменты командной строки
          • build_runner
          • веб-разработчик
      • Управление исходным кодом
        • Код форматирования
        • Что не делать
      • Статический анализ
        • Настройка статического анализа
        • Устранение типичных проблем
      • Тестирование и оптимизация
    .

    Языковой тур | Дротик

    • Документы
    • Платформы
    • Сообщество
    • Попробуй Дарт
    • Получить дротик
    • Платформы
    • Сообщество
    • Попробуй Дарт
    • Получить дротик
    • Документы
    • Образцы и руководства
      • Образцы языков
      • Codelabs
        • Список кодовых лабораторий Dart
        • Шпаргалка по языку
        • Итерируемые коллекции
        • Асинхронное программирование
      • Учебники
    • Язык
      • Эффективный дротик
        • Обзор
        • Стиль
        • Документация
        • Применение
        • дизайн
      • Методы расширения
      • Звуковая нулевая безопасность
        • Обзор
        • Понимание нулевой безопасности
      • Эволюция
      • Спецификация
      • Тур
      • Система типов
    • Основные библиотеки
      • Обзор
      • Тур
      • Статьи
        • Введение в дротик: io
        • Создание потоков
    • Пакеты
      • Как использовать пакеты
      • Часто используемые пакеты
      • Создание пакетов
      • Публикация пакетов
      • Ссылка на пакет
        • Зависимости
        • Глоссарий
        • Соглашения о компоновке пакетов
        • Переменные среды паба
        • Pubspec файл
        • Устранение неполадок в пабе
        • Проверенные издатели
        • Управление версиями
    • Развитие
      • Futures, async, await
      • Совместимость
        • C взаимодействие
        • Взаимодействие с JavaScript
      • JSON
      • Потоки
      • Мобильные приложения
      • Командная строка и серверные приложения
        • Обзор
        • Начать
        • Написание приложений командной строки
        • Написать HTTP-клиенты и серверы
        • Библиотеки и пакеты
      • Веб-приложения
        • Обзор
        • Начать
        • Получать данные динамически
        • Низкоуровневое веб-программирование
          • Подключите Dart и HTML
          • Добавить элементы в DOM
          • Удалить элементы DOM
        • Развертывание
        • Библиотеки и пакеты
    • Инструменты и методы
      • Обзор
      • Редакторы и отладчики
        • IntelliJ и Android Studio
        • Код VS
        • Dart DevИнструменты
        • DartPad
      • Инструменты командной строки
        • Dart SDK
          • Обзор
          • дротик (новый инструмент дротик)
          • dart2js (продукт JS)
          • dart2native
          • дартанализатор
          • dartaotruntime
          • dartdevc (разработчик JS)
          • дартдок
          • dartfmt
          • паб
        • Другие инструменты командной строки
          • build_runner
          • веб-разработчик
      • Управление исходным кодом
        • Код форматирования
        • Что не делать
      • Статический анализ
        • Настройка статического анализа
        • Устранение типичных проблем
      • Тестирование и оптимизация
    .

    учебных пособий | Дротик

    • Документы
    • Платформы
    • Сообщество
    • Попробуй Дарт
    • Получить дротик
    • Платформы
    • Сообщество
    • Попробуй Дарт
    • Получить дротик
    • Документы
    • Образцы и руководства
      • Образцы языков
      • Codelabs
        • Список кодовых лабораторий Dart
        • Шпаргалка по языку
        • Итерируемые коллекции
        • Асинхронное программирование
      • Учебники
    • Язык
      • Эффективный дротик
        • Обзор
        • Стиль
        • Документация
        • Применение
        • дизайн
      • Методы расширения
      • Звуковая нулевая безопасность
        • Обзор
        • Понимание нулевой безопасности
      • Эволюция
      • Спецификация
      • Тур
      • Система типов
    • Основные библиотеки
      • Обзор
      • Тур
      • Статьи
        • Введение в дротик: io
        • Создание потоков
    • Пакеты
      • Как использовать пакеты
      • Часто используемые пакеты
      • Создание пакетов
      • Публикация пакетов
      • Ссылка на пакет
        • Зависимости
        • Глоссарий
        • Соглашения о компоновке пакетов
        • Переменные среды паба
        • Pubspec файл
        • Устранение неполадок в пабе
        • Проверенные издатели
        • Управление версиями
    • Развитие
      • Futures, async, await
      • Совместимость
        • C взаимодействие
        • Взаимодействие с JavaScript
      • JSON
      • Потоки
      • Мобильные приложения
      • Командная строка и серверные приложения
        • Обзор
        • Начать
        • Написание приложений командной строки
        • Написать HTTP-клиенты и серверы
        • Библиотеки и пакеты
      • Веб-приложения
        • Обзор
        • Начать
        • Получать данные динамически
        • Низкоуровневое веб-программирование
          • Подключите Dart и HTML
          • Добавить элементы в DOM
          • Удалить элементы DOM
        • Развертывание
        • Библиотеки и пакеты
    • Инструменты и методы
      • Обзор
      • Редакторы и отладчики
        • IntelliJ и Android Studio
        • Код VS
        • Dart DevИнструменты
        • DartPad
      • Инструменты командной строки
        • Dart SDK
          • Обзор
          • дротик (новый инструмент дротик)
          • dart2js (продукт JS)
          • dart2native
          • дартанализатор
          • dartaotruntime
          • dartdevc (разработчик JS)
          • дартдок
          • dartfmt
          • паб
        • Другие инструменты командной строки
          • build_runner
          • веб-разработчик
      • Управление исходным кодом
        • Код форматирования
        • Что не делать
      • Статический анализ
        • Настройка статического анализа
        • Устранение типичных проблем
      • Тестирование и оптимизация
        • Тестирование
    .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *