Contents
dart:math – math and random
dart:mathライブラリ(APIリファレンス)は、正弦(sine)と余弦(cosine)、最大と最小、円周率とeなどの定数などの一般的な機能を提供します。mathライブラリのほとんどの機能は、トップレベルの関数として実装されています。
mathライブラリを使用するには、dart:mathをインポートします。
import 'dart:math';
Trigonometry
(三角関数)
mathライブラリは、基本的な三角関数を提供します。
// Cosine assert(cos(pi) == -1.0); // Sine var degrees = 30; var radians = degrees * (pi / 180); // radians is now 0.52359. var sinOf30degrees = sin(radians); // sin 30° = 0.5 assert((sinOf30degrees - 0.5).abs() < 0.01);
これらの関数はradians(ラジアン)を使います。degrees(度)ではありません。
Maximum and minimum
mathライブラリはmax()メソッドとmin()メソッドを提供します。
assert(max(1, 1000) == 1000); assert(min(1, -1000) == -1000);
Math constants
mathライブラリでは基本的な定数を提供しています。
// mathライブラリでその他の定数も見てみましよう。 print(e); // 2.718281828459045 print(pi); // 3.141592653589793 print(sqrt2); // 1.4142135623730951
Random numbers
Randomクラスを用いて乱数を生成します。Randomコンストラクタにシードを提供できます。
var random = Random(); random.nextDouble(); // Between 0.0 and 1.0: [0, 1) random.nextInt(10); // Between 0 and 9.
ランダムなbooleans(真偽値)を生成することもできます。
var random = Random(); random.nextBool(); // true or false
その他の情報はMath API referenceをご覧ください。またnum , int , doubleのAPI referenceもご覧ください。
dart:convert – decoding and encoding JSON, UTF-8, and more
dart:convertライブラリ(API reference)はJSONやUTF-8、その他の変換(converters)に関する機能を提供します。JSONはオブジェクトやコレクションの構造を表現するテキストフォーマットです(簡単にいうと文字列)。
UTF-8は、Unicode文字セットのすべての文字を表すことができる一般的な可変幅エンコーディングです。
このライブラリを使用するには、dart:convertをインポートします。
import 'dart:convert';
Decoding and encoding JSON
JSONエンコード:Dartのオブジェクト → JSON(文字列)
JSONデコード:JSON(文字列) → Dartのオブジェクト
「JSONエンコードされた文字列」をDartのオブジェクトへ変換(デコード)するにはjsonDecode()メソッドを使います。
// JSON文字列の中ではダブルクウォート(")を使用します。 // シングルクウォート(')は使わないでください。 // ↓これはJSON文字列です。Dartのオブジェクトではありません。 var jsonString = ''' [ {"score": 40}, {"score": 80} ] '''; var scores = jsonDecode(jsonString); print(scores.runtimeType); //List<dynamic> assert(scores is List); var firstScore = scores[0]; print(firstScore.runtimeType); //_InternalLinkedHashMap<String, dynamic> assert(firstScore is Map); assert(firstScore['score'] == 40);
DartオブジェクトからJSONへと変換(エンコード)するのにjsonEncode()メソッドを使います。
var scores = [ {'score': 40}, {'score': 80}, {'score': 100, 'overtime': true, 'special_guest': null} ]; var jsonText = jsonEncode(scores); print(jsonText); //[{"score":40},{"score":80},{"score":100,"overtime":true,"special_guest":null}]
int、double、String、bool、null、List、またはMap(文字列キーを使用)
これらの型のオブジェクトのみが、JSONに直接エンコードできます。
ListオブジェクトとMapオブジェクトは再帰的にエンコードされます。
再帰的:オブジェクトのフィールド、オブジェクトのフィールドのフィールド、…も全てエンコードしてくれる、ということ。
直接エンコードできないオブジェクトをエンコードするには、2つのオプションがあります。
1つ目はjsonEncode()
メソッドを2番目の引数を渡して呼び出すことです。2番目の引数には、「直接エンコード可能なオブジェクトを返す関数」を渡します。
2番目のオプションは、jsonEncode()メソッドの2番目の引数を省略する方法です。この場合、エンコーダーはオブジェクトのtoJson()メソッドを呼び出します。
JSON関連パッケージの詳しい情報はUsing JSONをご覧ください。
Decoding and encoding UTF-8 characters
utf8.decode()
メソッドで、UTF8でエンコードされたバイトをDart文字列にデコードするために使用します。
List<int> utf8Bytes = [ 0xc3, 0x8e, 0xc3, 0xb1, 0xc5, 0xa3, 0xc3, 0xa9, 0x72, 0xc3, 0xb1, 0xc3, 0xa5, 0xc5, 0xa3, 0xc3, 0xae, 0xc3, 0xb6, 0xc3, 0xb1, 0xc3, 0xa5, 0xc4, 0xbc, 0xc3, 0xae, 0xc5, 0xbe, 0xc3, 0xa5, 0xc5, 0xa3, 0xc3, 0xae, 0xe1, 0xbb, 0x9d, 0xc3, 0xb1 ]; var funnyWord = utf8.decode(utf8Bytes); assert(funnyWord == 'Îñţérñåţîöñåļîžåţîờñ');
工事中🏗
UTF-8バイトのstreamをDart文字列のstreamに変換するために
utf8.decoder.bindメソッドを使います。
参考
https://dart.dev/guides/libraries/library-tour#dartmath—math-and-random
https://dart.dev/guides/libraries/library-tour#dartconvert—decoding-and-encoding-json-utf-8-and-more