Skip to content

DNET_Dart

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

Dart

概要

一応、AltJS(JavaScriptの該当節を参照)(Flutter専用言語ではない)

  • Googleによって開発されたウェブ向けのプログラミング言語
  • 普及は進まず、2015年にはVMのChrome統合を断念
  • TypeScript(JavaScriptの該当節を参照)をGoogle社内の標準プログラミング言語として承認
  • しかし、2018年2月に発表されたDart2&Flutterが進撃を開始した。
  • JavaScriptへのトランスパイラ以外にVMも持っている(FlutterはVMを使用)。

詳細

基本

エントリポイント

void main() {
  print("Hello, World!");
}

  • 基本型
    int、double、num、bool、Null、String

  • 配列

    • List:一次元配列
    • Set:ユニークな値の一次元配列
    • Map:連想配列
  • その他

    • Generic型
    • dynamic型
  • 型変換
    .toString()など。

  • Null Safety(Flutterのセカンド・ステップの該当節を参照)

変数

  • 自動型推論
    varを使用できる。

  • 変数宣言キーワード

    • const:定数
    • final:変数だが初期化時以外の代入不可
  • 命名規則

    • 変数:lowerCamelCase
    • クラス:UpperCamelCase

関数

  • 定義

    <戻り値の型> <関数名>([<引数の型> <引数値>],[<引数の指定>]){
      return <戻り値>;
    }
    
    • public / private

      • private
        関数名の先頭を「_」にする。

      • public
        privateでなければ、publicになる。

    • instance / static

      • static
        staticを付与する。

      • instance
        staticでなければ、instanceになる。

    • 戻り値

      • 型の省略

        helloWorld2(world){
          return 'Hello $world';
        }
      • 非同期

        Future<void> ...() async {
          ...
        }
  • 引数

    • 名前付き引数
      "{}"内に定義する。

      computeSum({int val1, int val2}){
        return val1 + val2;
      }
    • オプショナル引数

      • オーバーロードは無いのでコレで対応できない場合はリネームする。
      • "[]"内に定義して、nullを許容しないものには初期値を指定。
      List<String> splitString(String input, [String split = ',', int max = 100]){
        // 省略
      }
  • ラムダ式
    $はプレースホルダ

    • ワンライナー(右辺に式)

      String helloWorld4(String world) => 'Hello $world';
    • 無名関数(右辺にコードブロック(クロージャ))

      String helloWorld4(String world) { 'Hello $world'; };

クラス

  • new演算子
    インスタンスの作成のnew演算子は省略可能

  • インターフェイス(抽象クラス)
    クラス定義にabstractキーワードを使用する。

  • 継承

    • 具象クラス:extendsキーワードを利用して継承
    • 抽象クラス:implementsキーワードを利用して継承
  • メンバ変数

    • 先頭が「_」から始まるモノは、Internal相当。
    • Flutterではthisは省略されることが多い。
  • メソッド

    • オーバーライドはできる。
    • オーバーロードはできない。
    • ミックスインと言うメソッド追加の仕組みがある。
      • mixinキーワードを利用してクラス風に定義して、
      • withキーワードを利用して多重継承っぽく使用できる。
      • 中から使う場合は、thisではなくsuperを使用するらしい。
  • コンストラクタ

    • 略記の形式が幾つかある。
    • 名前付きコンストラクタ
    • リダイレクト・コンストラクタ
    • Factoryコンストラクタ
      • 抽象クラスで派生クラスを返したり
      • シングルトンで返したりできる。
  • ゲッター・セッター

    String _name;
    set name(String value){
      _name = value;
    }
    String get name{
      return _name;
    }

library

  • libraryで名前をつけられる。

  • libraryを明示しなくても自動的に
    タグがつけられてライブラリとして扱われる。

  • dart:で始まるライブラリと、
    package:で始まるその他のライブラリがある。

part / part of

partとpart ofでlibraryのファイル分割が可能。

import / export

  • import

    • ライブラリを読み込む

    • 同じパッケージ内のライブラリ(≒ファイル)

      • パッケージ名のlib以下の仮想パスで指定。

        import 'package:my_package/src/other_library.dart';
      • 自ファイルからの相対パスで指定。

        import 'src/other_library.dart';
        import '../other_library.dart';
  • export

    • 外部に公開するライブラリを指定する。

    • メインのライブラリにexportを記述すると、
      メインのライブラリを読み込むだけで、
      exportされたライブラリにアクセスできる。

show / hide / as / deferred

オプション

  • show

    • import / exportで利用可能。
    • 指定したクラスや関数のみを参照
  • hide

    • import / exportで利用可能。
    • 指定したクラスや関数を参照しない
  • as

    • importでのみ利用可能。
    • 指定したクラスに別名を指定
    • C#のusing エイリアス(別名) ディレクティブ的な。
  • deferred

    • importでのみ利用可能。
    • deferred asで、エイリアス利用時まで遅延ロード

非同期処理

Futureクラス

Promise (JavaScript)とほぼ同様

async/await

async/await (JavaScript)とほぼ同様

その他

Stream

スプレッド演算子(...)

  • 配列またはオブジェクトの要素を展開する。
  • ECMAScriptにもあるヤツ(ECMAScriptの該当節を参照)。

参考

Publickey

CodeZine(コードジン)

adventar.org

すぐにFlutterを始めたい人のためのDart入門

DevelopersIO

移行メモ

  • ラムダ式の説明にあった全角の「$」は、直後のコード例に合わせて 半角の $ とした。また「ワンライナー(右辺に式」「無名関数(右辺にコードブロック(クロージャ」の 閉じ括弧の欠落を補った。
  • 「ワンライナー」「無名関数」の 2 つの例は元 Wiki の時点で 同じ関数名(helloWorld4)になっている。
  • マイクロソフト系技術情報 Wiki(techinfoofmicrosofttech.osscons.jp)への URL リンクは、移行済みの LINQ / Reactive Extensions(Rx) に張り替えた。
  • PukiWiki のページ内アンカ(#xxxxxxxx)は GitHub Wiki では再現できないため、 同一ページ内のアンカは見出しから生成されるアンカに張り替え、 他ページのアンカを指すリンクは「〜(ページ名 の該当節を参照)」の形に置き換えた。
  • 本フェーズで新たに参照された「async/await (JavaScript)」を TODO.md に予約した。

Tags: 移行, Dart, Flutter, AltJS, 型, クラス, library, 非同期処理, Stream

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally