Как выучить новый язык на примере Dart

внешний интерфейс Язык программирования Dart
Как выучить новый язык на примере Dart

В мире нет одного языка, который можно было бы использовать во всех сферах, и чтобы справиться с разными сценариями и потребностями, мы не можем избежать изучения нового языка. Готов идти в ямуFlutter(Технический резерв), немного изучил дартс и поделился со всеми небольшим опытом.


контур


представлять

1. Предположения

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


2. Основные принципы

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

    • JavaScript: Повелитель языков сценариев браузера, JavaScript нельзя обойти при написании внешнего интерфейса. Не спрашивайте о языке, который был разработан более чем за десять дней.[] == ![] // trueКакая мотивация, не учите этих отбросов.
    • Dart: Оптимизация языка для клиента («Flutter»), изначально заявленного как замена JavaScript, официальное позиционирование — клиент.
    • Go: сказал бытьC++Язык, который вынужден медленно компилироваться. Таким образом, вы можете стоять на противоположной стороне C++ и думать о его структуре: простой синтаксис, высокая скорость компиляции, сборка мусора, высокая производительность, высокий уровень параллелизма. Половина из них предназначена для решения задач на C++. Подходит для серверного программирования, распределенного, сетевого программирования, облачной платформы.
    • Rust: языки системного программирования,C/C++самый сильный претендент

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

    • Swift/Objective-CПо сути, его можно использовать только на платформе Apple.Хотя Swift имеет открытый исходный код и может также работать в Linux, Swift редко используется, за исключением разработки приложений Apple.
    • C#Похож на Свифт

  • Не увязайте в грамматических деталях языка, уберите синтаксический сахар. При изучении нового языка вы можете временно игнорировать детали грамматики и переключиться на перспективу Бога.

  • На основе исходного познания горизонтальное сравнение. Обычно концепция языка программирования 80% или парадигма является универсальным, поэтому вы знакомы с языком, вы можете начать работу с другими языками.

  • Когнитивный перерыв. Остальные 20% содержат функции и идеи, которые уникальны для языка, и это то, на чем мы должны сосредоточиться.


3. Базовая поза

  • Определите проблему/сценарий, который вы хотите решить. Как правило, мы не изучаем язык ради изучения языка. Во-первых, у вас должны быть сценарии и проблемы, которые необходимо решить, а затем использовать эти проблемы для выбора языков программирования и выявления нескольких языков-кандидатов.
  • Подумайте, как эти языки решают вашу задачу?Это процесс «нарушения восприятия» и анализируя сильные и слабые стороны этих кандидатов
  • Вы уверены, что хотите узнать этот язык?За этим шагом последует следующее
    • Создать облако тегов. Соберите 20% уникальных функций/идей этого языка, таких как Killer Feature, Slots, Blowing Points, и изучите их осознанно.
    • Грубый взгляд на официальную документацию. То есть у 80% есть базовое представление об базовой грамматике, которую можно быстро понять по аналогии с языком, с которым они знакомы.
    • Начать. Теперь у вас есть первое впечатление о языке. Начинайте практиковаться, пока горячо, например, вы можете следовать официальному вступительному руководству. Вы можете быстро стать опытным, ознакомившись с документацией во время практики.
    • Узнайте больше о языке


ранее существовавшие языковые знания

Ниже приведена диаграмма состава распространенных языков программирования.Знаете ли вы все эти концепции?Вы действительно знаете парня, которого употребляете в пищу?



Не понимаю? Похоже, вы не выучили настоящий (сложный) язык, напримерScala,C嘎嘎,Rust. 😺 После пересечения этих гор, остальное лишь мельком виден маленькие горы. слишком трудно

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

  • По рынку:

    • Универсально типизированный язык (для еды). например, Java, JavaScript, Python, C/C++, Go, PHP, Objective-C/Swift (разработчики iOS, не строго «универсальные»)
    • Нишевый язык, который соответствует вашим вкусам. Rust, Elixir, Ruby, Kotlin, Clojure, OCaml...
  • По парадигме:

    • Объектно-ориентированный: например, Ruby, Java, Python...
    • Мультипарадигма: например, JavaScript, Scala, Rust...
    • Функциональные: например, Lisp (например, Clojure), Erlang, Haskell...
    • Процедурные: такие как C, Go (можно рассматривать как объектно-ориентированные, что угодно)
    • Язык прототипа: Io, хорошая ниша
  • Другие методы деления:

    • Тип: сильный тип, слабый тип; статический тип, динамический тип
    • Метод выполнения: статический язык, язык сценариев
    • Системный уровень: язык системного программирования, язык приложений


Создать облако тегов

Как было сказано выше, 80% знаний можно использовать повторно, а остальные 20% уникальных особенностей и идей языка нам нужно сознательно изучать. Один из методов, который я представляю здесь, — это создание облака тегов.Это облако тегов является ключевым описанием языка.. Например, его основные особенности, преимущества и жалобы.

Эти ключевые описания очень полезны для нас быстро понимать язык,Это облако ярлыков на самом деле представляет ваше основное впечатление от этого языка.. Другими словами, вы изучаете язык, но мало им пользуетесь, и через какое-то время вы забываете все грамматические детали, но основное впечатление от языка остается в вашей памяти надолго. Я думаю, что эти впечатления и есть суть языка!

Так как же собрать это облако тегов?

  • Откройте официальный сайт. Посмотрите, как чиновник описывает ваш язык, каковы его основные черты и каково его позиционирование.
  • См. Также Wiki для описания и определения языковых систем.
  • Почти знаю. Посмотрите, как другие люди хвастаются или разглагольствуют о языке
  • слух
  • Официальное руководство по быстрому предварительному просмотру. Найти выделение

Просто чтобы назвать несколько примеров. Язык дартс:

Использование облака теговWordCloudsгенерировать


Перейти на язык:


Javascript:


Elixir:



Намеренное обучение на примере Dart

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

метод обучения, всегдаWhat / Why / How: Что это такое, почему так задумано и как это сделать?

① Самый раздражающий язык в 2018 году?

Без Flutter язык действительно бы умер. Язык программирования тоже зависит от отца


② Оптимизировано для клиента

Это официальная позиция.

В основном отражается в оптимизации клиента开发体验а также运行性能над

  • JIT(Just in Time) Вступает в силу быстрая компиляция, которая является основой Hot reload.Горячая перезагрузка может приблизить Flutter к опыту веб-разработки
  • AOT(Заблаговременно) Создавайте эффективный нативный код. Может получить более высокую скорость работы и скорость запуска
  • Другой смысловой уровень заключается в том, что Dart — это язык, очень похожий на JavaScript. Например, синтаксис, один поток/цикл событий, управление событиями, асинхронность/ожидание, изоляция, генератор, будущее/поток, сбор if/for сопоставимы с JSX.
  • Поддерживается компиляция в JavaScript. Браузеры — важные клиенты, как вы смеете говорить об оптимизации на стороне клиента без поддержки JavaScript?

③ Объектно-ориентированный

Синтаксис очень похож на Java, но с некоторым синтаксическим сахаром.

  • Нет ключевого слова для различения класса и интерфейса, можно сказать, что класс — это интерфейс.

  • Mixins. Интерфейс должен быть знаком с концепцией Mixin, в конце концов, так много людей используют Vue?

  • Перегрузка оператора. Javascript не поддерживает перегрузку операторов. Так что это новинка для передней части. Но лично я не рекомендую, разве не круто использовать JavaScript без перегрузки операторов? И семантика операторов не ясна, что добавит умственной нагрузки.В это время лучше использовать четко определенный метод.Значимые имена легче запомнить, чем символы.

  • newНеобязательный. Делает код более кратким в определенных сценариях, таких как декларации компонентов трепетания. Это может составить боли не иметь JSX.

    void main() {
      runApp(
        Center(
          child: Text(
            'Hello, world!',
            textDirection: TextDirection.ltr,
          ),
        ),
      );
    }
    
  • Callable Classes. Синтаксический сахар, никаких сценариев применения я не ожидал.

    class WannabeFunction {
      call(String a, String b, String c) => '$a $b $c!';
    }
    
    var wf = new WannabeFunction();
    var out = wf("Hi","there,","gang"); // 🍬
    

    я прямоwf.callНичего страшного, верно? Вдохновлены JavaScript? Функция JavaScript также является объектом и может иметь свои собственные свойства.


④ оператор

В Dart также есть несколько интересных операторов/выражений, чтобы увидеть, как это мило:

  • Каскадная нотация.级联操作符是一个很甜的语法糖。不说废话,看代码:

    querySelector('#confirm') // Get an object.
    ..text = 'Confirm' // 🍬 甜点,这是类 jQuery 的串行调用的增强版
    ..classes.add('important')
    ..onClick.listen((e) => window.alert('Confirmed!'));
    

    Эквивалентно:

    var button = querySelector('#confirm');
    button.text = 'Confirm';
    button.classes.add('important');
    button.onClick.listen((e) => window.alert('Confirmed!'));
    

  • Операторы сбора. Этот синтаксический сахар также будет более сладким, и использовать Dart для описания представлений Flutter на ранней стадии очень сложно. Dart добавил несколько десертов один за другим, например,展开操作符,Collection if/for, Плюс命名函数参数а такжеnew可选, по выразительности очень близко к JSX

    [0, ...list];
    [0, ...?list]; // 支持识别null的展开操作符
    
    // collection if
    var nav = [
      'Home',
      'Furniture',
      'Plants',
      if (promoActive) 'Outlet'
    ];
    
    // collection for
    var listOfStrings = [
      '#0',
      for (var i in listOfInts) '#$i'
    ];
    


⑤ const/final и статические данные

Есть много мест, где const/final используется в dart, что можно использовать для изменения переменных, переменных экземпляра и создания объекта.

Примечание. Статические данные и неизменяемые данные — это разные понятия.

  • переменная модификация
final name = 'Bob';
const bar = 100000;
const foo = [];
const baz = [];

console.log(foo == baz); // true 编译时常量

const будет рассматриваться как константа «времени компиляции». Лучше финала


  • создание предмета декора
var foo = const [];

Когда создается константная измененная переменная, Dart по умолчанию создает экземпляр объекта в контексте константы:

const primaryColors = [
  Color("red", [255, 0, 0]),
  Color("green", [0, 255, 0]),
  Color("blue", [0, 0, 255]),
];

PrimaryColor оформляется константой, затем объекты, созданные под ним, неявно украшаются константой. Приведенный выше код эквивалентен:

const primaryColors = const [
  const Color("red", const [255, 0, 0]),
  const Color("green", const [0, 255, 0]),
  const Color("blue", const [0, 0, 255]),
];

Встроенные объекты-контейнеры Dart по умолчанию поддерживают const.. Для пользовательских классов класс должен предоставитьконстантный конструктор, и все экземпляры должны быть финализированы.

class ImmutablePoint {
  static final ImmutablePoint origin =
      const ImmutablePoint(0, 0);
  // 所有实例变量都必须用final修饰
  final num x, y;
  // const 构造方法
  const ImmutablePoint(this.x, this.y);
}

⑥ Система типов

  • Номинальный тип. Нет утка утка утка 🦆🦆🦆

  • Система звуковых типов (Soundness, Strict Type System). которыйСтатическая типизация + проверка во время выполнения, Например, переменная, статический тип которой String, если ей присвоить int, компилятор сообщит об ошибке. Но каким-то образом мы можем обойти проверки компилятора, такие как приведение типов. Система звуковых типов выполняет проверку типов во время выполнения и не пропускает эти ошибки.

    main(List<String> args) {
      int a;
      a = "1" as int; // 绕过了静态类型检查, 但是运行会报错
    }
    

    выгода:

    • более надежный код
    • Хорошо для АОТ
    • Устраните ошибку, рыба, рыболовная сеть стадии компиляции, также будет протестирована, не держите удачу.
  • динамический: можно рассматривать как любой тип, верно? старайтесь избегать использования


⑦ Асинхронный асинхронный

Будущее/поток, асинхронное/ожидание, генератор. Излишне говорить, что вы знакомы с JavaScript и понимаете его с первого взгляда.


⑧ Метапрограммирование

  • Метаданные. Подобно аннотациям Java. Как следует из названия, метаданные предназначены для предоставления вашему коду дополнительной информации. Его можно использовать для запроса компилятора, а информацию о метаданных также можно получить во время выполнения через библиотеку отражения.

    class SmartTelevision extends Television {
      @override
      void turnOn() {...}
      // ···
    }
    
  • noSuchMethod(). Подобно методу Ruby_missing. Вызывается, когда свойство или метод не найдены, могут быть реализованы некоторые динамические свойства или методы. Артефакт метапрограммирования. Того же эффекта можно добиться с помощью Proxy в JavaScript.



Честно говоря, у Dart не так много привлекательных функций. В нем можно увидеть тень многих других языков, таких как Java, JavaScript, Swift... Это и понятно, современные языки программирования все больше и больше похожи.

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



упражняться

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

Вы можете начать с Hello World или с официального руководства по началу работы. Слова Дарта.

hello world !

void main(List<String> args) {
  print('Hello, World!');
}

Некоторую ключевую информацию также можно получить с помощью простейшего hello world:

  • C-подобные объявления типов префиксов.
  • основная запись программы
  • Раздел не может быть опущен
  • стандартная библиотека. распечатать изdart:coreЭтот пакет является глобальным
  • Массив списка
  • Дженерики
  • ...

Флаттер, сделай это!



Узнайте больше о языке

Если вы любите язык и хотите развивать ваши отношения, вам нужно хорошо его знать:

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


Суммировать

Языки программирования также имеют три сферы:

Посмотри на гору это гора, посмотри на гору это не гора, посмотри на гору или на гору

  • ① Я использую лучший язык, такой как PHP, который великолепен
  • ② Все языки похожи, суть одна
  • ③ Вернемся к языку. Язык — это всего лишь инструмент. Так же, как кисть художника, но инструмент для реализации собственных идей. На этом этапе мы уже не спорим о том, какой язык лучше, а выбираем разные кисти для разных эффектов рисования.

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



расширять