工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

Dart言語 メモ

概要

Flutterを使うために最低限知っておくべきDart言語に関する自分用メモ


背景と目的

Flutterを使ってスマホアプリを作成する必要が出たため、まずは開発言語であるDartについて最低限必要な内容について学習し、メモしておく。


詳細

Playground

DartPadというものがある。

https://dartpad.dev/

コメント

// 

データ型

// int
int i = 0;

// double
double a = 0.0;

// 文字列
String name = 'abc';
String name = "abc"; // ''または""

// bool
bool x = true; // false

// List
List<String> nameList = ['a', 'b', 'c']; // <型>で宣言する
nameList[0]; // アクセス
nameList.add('d'); // addメソッドで追加

// Map
Map<String, String> nameMap = {
    'a': 'x'
}; // javascript objectと同じ感じ
nameMap['a']; // xを取り出し

// var = 型推論してくれる
var name = 'abc'; // Stringになる

// enum 列挙体
enum Animal {
    dog,
    cat,
    bear
}
Animal animal2 = Animal.dog; 

文字列操作

'a' + 'b' // 'ab'

main関数

void main () {

}

関数

String aaa(int x, int y) {
  String name = 'abc';
  return name;
}

// 名前付き引数
// 3種類の引数定義
void aaa({int? x, int? y}) {
  // 名前付き引数は、引数を与えるのが必須ではないので
  // null許容のための?をつける
}
void aaa({required int x = 0, required int y = 1}) {
  // 名前付き引数は、引数を与えるのが必須ではないので
  // requiredで必須化する
}
void aaa({int x = 0, int y = 1}) {
  // 名前付き引数は、引数を与えるのが必須ではないので
  // デフォルト値を与えられる
}
aaa(x: 10, y: 5); // 呼び出すとき

アロー関数

String abc() {
  return 'aaa';
}
String abc() => 'aaa';

Future

非同期処理のための仕組み

Future<void> test2() async {
    Future.delayed(Duration(seconds: 3));
    print('フィニッシュ');
}
// 開始後、すぐにフィニッシュが表示される
test2();

// 同期処理したいとき
// async/awaitを使う
Future<void> test2() async {
    await Future.delayed(Duration(seconds: 3));
    print('フィニッシュ');
}
// 3秒後にフィニッシュが表示される
test2();

Widget

import 'package:flutter/material.dart';

void main() {

  Widget txt = Text('abc');

}

演算子

a / b; // 除算
a ~/ b; // 商
a % b; // a÷bの余り

num++; // インクリメント
num--; // デクリメント

// *=, /=もある
num += 3; // 加算
num -= 3; // 減算

// 比較演算子
a == b;
a != b; 
a > b;
a < b;
a >= b;
a <= b;

// 論理
age >= 20 && age < 30; // かつ
age < 20 || age >= 30; // または

三項演算子

elseはコロンで書く。

num == 0 ? print('numは0') : print('numは0でない');

制御構文

// forはC言語と全く同じ
for (int i = 0; i < 5; i++) {

}

// for-in
List<String> nameList = ['a', 'b', 'c']; 
for (String name in nameList) {
  print(name);
}

// while
// break, continueあたりも同じ

// switch
// だいたいCと同じ
switch(num) {
  case 0:
     break;
  case 1:
     break;
  default:
     break;
}

try~catch~finally

throwでエラーを起こせる

try {
  // 
 throw('エラーが発生');
} catch(e) {
  // 
  print(e);
} finally {

}

Null Safety

?をつけるとNullが許容される

int num = null; // Null を許容していないので、エラー
int? num = null; // Null許容しているのでエラーにならない

x ?? 0; // xがNullなら、0にする

アクセス制御/修飾子

final と const

// finalとconstの違い
// const: コンパイル時に定まっているべき定数
// final: 実行時に定まる定数
final String name = 'abc'; // コンパイル時に定まるように定義が必要
const String name2 = name; // 実行時に定まるように定義できる

class

privateはアンダーバーをつける。Pythonと同じ感じ。

class MyClass {
  int name; // パブリック
  int _age; // アンダーバーでprivateメンバにできる
  static String x = 'abc'; // 静的メンバ

  // コンストラクタ
  MyClass(this.name);
}

print

print(0);

VSCode

拡張機能

dartcode.org

SDK

https://dart.dev/get-dart#choose-an-installation-option

4つの方法があるが、Flutterをインストールする予定なので、Flutter同梱のDart SDKを用いることにする。

  1. Install Flutter. If you've installed or plan to install the Flutter SDK, it includes the full Dart SDK. The Flutter SDK includes the dart CLI tool in Flutter's bin folder.

settings.json

    "[dart]": {
        "editor.tabSize": 2,
        "editor.insertSpaces": true,
        "editor.detectIndentation": false,
        "editor.suggest.insertMode": "replace",
        "editor.defaultFormatter": "Dart-Code.dart-code",
        "editor.inlayHints.enabled": "offUnlessPressed"
    }


まとめ

Dart言語について、自分の中で最低限の知識を整理できた。