2020/8/29 Dart: factoryコンストラクタのメリット

factoryコンストラクタ(というかfactoryパターン)のメリットがよくわからないが、一つメリットと言えるのは

http://tomochikahara.com/blog/2013/08/08/factory-constructors-in-dart

3. 具象クラスの隠蔽

Factoryコンストラクタで返す値は、Factoryコンストラクタが定義されているクラスのインスタンスである必要はなく、その型に代入可能であるインスタンスであればよいので、実際に返すインスタンスのクラスを動的に変えることができます。

上記ページのサンプル。

bool isCountry(String name){
  if(name=='nagoya'){
    return false;
  }else{
    return true;
  }
}

class Location {
  final String name;
  Location._internal(this.name);
  factory Location(String name) =>
      isCountry(name) ? new Country(name) : new City(name);
}

class Country extends Location 

2020/8/27 Dart : tour>>classes>>Methods〜の訳

Classes

 

Using class members

 

Using constructors

 

Getting an object’s type

 

Instance variables

 

Constructors

 


Methods

Methods are functions that provide behavior for an object.

メソッドはオブジェクトの振る舞いを提供する関数です。

Instance methods

Instance methods on objects can access instance variables …

2020/8/27 Dart : A tour of the Dart language>>Classesの訳

Classes

Dartの全てのオブジェクトはクラスのインスタンスであり、全てのクラスはObjectクラスから派生します。

Objectクラスを除く全てのクラスが一つのスーパークラスを持ちます(多重継承はできない。)が、それにも関わらず、クラスのボディは複数のクラス階層の中で再利用できます。これが「Mixinベースの継承」です。

Extension methodsを使うとクラス定義を変えずに、またサブクラスも作らずに機能を特定のクラスに追加することができます。


Using class members

オブジェクトは関数とデータから構成されるメンバーを持ちます(それぞれメソッドとインスタンス変数と呼びます。)あなたがメソッドを呼び出す時、オブジェクトにおいてメソッドを実行します。そのメソッドはそのオブジェクトの関数(メソッド)とデータ(インスタンス変数)にアクセスできます。

インスタンス変数、あるいはメソッドを参照するにはドット( . )を使います。

var p = Point(2, 2);

// Set the value of the instance variable y.
p.y = 3;

// Get the value of y.
assert(p.y == 3);

// 

2020/8/27 Dart : Sound null safety の訳 工事中🏗

適切なnull safetyがDartにやってきました。あなたがnull safetyを導入する時、コードの中の型はデフォルトでnon-nullableです。これは、あなたが許可した時以外、(変数・定数の)値がnullであることは許されない、ということです。null safetyにより、実行時のnull-dereference errorは編集時の解析エラーになります。

Note:

 

 

 

 

参考

https://dart.dev/null-safety

2020/8/27 Dart : The Dart type systemの訳

導入

Dart言語は、型安全です。静的な型チェックと、「変数の値が常にその変数のstatic typeにマッチすることを確実にする実行時のチェックのコンビネーションです。時にサウンドタイピングと呼ばれます。

しかしながら、型は強制的にもかかわらず、型注釈はオプショナルです

型システムを含むDart言語全体のイントロダクションに関しては、language tourをご覧ください。

静的な型チェックの一つの恩恵は、バグ発見をコンパイル時にDartの静的アナライザを使って行えることです。

ジェネリッククラスに型アノテーションを追加することで、ほとんどの静的分析エラーを修正できます。最も一般的なジェネリッククラスは、コレクションタイプ List<T>Map<K,V>です。

例えば、下のコードで、printInts()関数は引数としてList<int>型を受け取り、それを表示します。main()関数でリストを生成し、それをprintInts()関数に渡しています。

✖️static analysis:error/warning
void printInts(List<int> a) => print(a);

void main() {
  var list = [];
  list

2020/8/26 Dart : Extension methodsの訳

Extension methods

Dart2.7で導入されたExtension methodは、既存のライブラリに新たな機能を付け加える方法です。あなたは知らず知らずのうちにextension methodを使っているかもしれません。例えば、IDEでコード補完を使用すると、通常のメソッドに加えて拡張メソッドが提案されます。

Overview(概要)

誰かが作ったAPIを使う時、あるいはあなたが幅広く使われるライブラリを実装する時、APIを変更することが不可能、あるいは現実的では無いケースはよくあります。

例えば、文字列を数値へと解析(変換)する以下のコードを考えてみます。

int.parse('42')

↑int型の静的メソッド(クラスメソッド)としてparseメソッドが用意されている。parseメソッドはString型を引数にとる、ということ。

上記の型式よりも、String型のインスタンスメソッドとして「そのString型インスタンスを数値に変換して返すparseIntメソッド」を用意した方がよりniceかもしれません。つまり↓

'42'.parseInt()

ということですね。しかし実際にはStringクラスにparseInt()という名の、自身を数値に変換するメソッドは定義されていません。よってDartpadで以下のコードを実行すると下記のようなエラーが出ます。

void main(){
  print("${"45".parseInt()}");
}

/*
Error compiling to JavaScript:
main.dart:13:17:
Error: The method 'parseInt' isn't defined for the class 'String'.
  print("${"45".parseInt()}");
                ^^^^^^^^
Error: Compilation failed.
*/

Stringクラスに対して上記のparseIntメソッド(の機能)を付け加えたい場合に、Stringクラスの定義内にparseIntメソッドの定義を実装する…

2020/8/23 Firebase:Add data to Cloud Firestoreの訳

Cloud Firestore >> Add and manage data >> Add data

Add data to Cloud Firestore

Cloud Firestoreデータベースへデータを書き込む方法はいくつかあります。

  • ドキュメント(ID)を指定してコレクション内のドキュメントにデータをセットする。
  • コレクション内に新しいドキュメントを追加する。(Cloud Firestoreが自動的にドキュメントIDを生成する)
  • 自動生成のドキュメントIDにより空のドキュメントを生成し、後でデータを代入する。

このガイドでは、Cloud Firestoreにおいてデータを各ドキュメントに

set

add

update

する方法を説明します。一括してデータ書き込みしたい場合「トランザクションとバッチ書き込み」をご覧ください。


Set a document

一つのドキュメントを新規作成、あるいは上書きするには、setData()メソッドを使います。

    Firestore.instance.collection("cities").document("LA").setData(
        {
          "name"    : "Los Angels",
          "state"   : "CA",
          

2020/8/23 Firebase:Choose a data structureの訳

 

Cloud Firestore >> Add and manage data >> Structure data

Cloud Firestoreであなたのデータ構築する時、いくつかの方法があります。

  • Documents
  • Multiple collections
  • Subcollections within documents

それぞれの方法の利点をあなたのユースケースと照らし合わせて考えていきましょう。このガイドでいくつかの階層構造のデータの構築のサンプルを見ていきます。

Nested data in documents

ドキュメント内で、配列やマップのように複雑なオブジェクトをネストする方法です。

利点:ドキュメント内で長さの決まっているシンプルなlists(配列)データがある場合、セットアップが用意です。

制限:他の方法のようなスケーラビリティはありません。リストの長さが大きくなると、ドキュメントも大きくなります。そうするとドキュメント取得に時間がかかります。

ユースケース:例えば、チャットアプリのプロフィール内で、そのユーザの最近の3つの訪れたチャットルームを保存したい場合。

 

Subcollections

時間の経過と共にデータ量が増える可能性のあるデータの場合ドキュメント内にサブコレクションを生成する方法が良いです。

利点:ドキュメント内のリスト(配列)の要素数が増えても、ドキュメントのサイズを変えたくない場合に適しています。サブコレクションに置いて完全なクエリ能力を獲得できます。また、サブコレクションに対してcollection group queriesを発することができます。

制限:サブコレクションを簡単に削除することができません。

ユースケース:例えば、チャットアプリで、チャットルームドキュメントの中にusersサブコレクションを作る、あるいはチャットルームドキュメントの中にmessagesサブコレクションを作る、というようなケース。

 

Root-level collections

異なる種類のデータセットを扱うために、Firestoreのルートレベルに複数のコレクションを作る方法です。…

2020/8/23 firebase:data model 訳

Understand Cloud Firestore>>Data model

Cloud Firestore Data model

Cloud FirestoreはNoSQLのドキュメント志向のデータベースです。SQLデータベースとは違い、テーブルや行はありません。代わりにデータはドキュメントに格納します。ドキュメントはコレクションの中に整理されます。

それぞれのドキュメントにはキーバリューペアのセットが含まれます。Cloud Firestoreは、小さなドキュメントを多数格納することに最適化されています。

全てのドキュメントはコレクションの中に格納されます。ドキュメント内に「サブコレクション」を格納することができます。ドキュメント内にネストしたオブジェクトを格納することもできます。サブコレクション・ネストしたオブジェクトはStringなどの基本的な型のフィールド、あるいはリスト(配列)のような複雑なオブジェクトを含むことができます。

Documents

Cloud Firestoreではstorageの単位はドキュメントです。ドキュメントは軽量の記録です。ドキュメントは値と、値に関連づけられたフィールド名を持ちます(つまりキーバリューペア)。各ドキュメントはname(名前)で識別されます。

ユーザーalovelaceを表すドキュメントは以下のようになります。

📃 alovelace

first : "Ada"
last : "Lovelace"
born : 1815

Note

Cloud Firestoreは様々な型のデータをサポートしています。boolean,number,string,geo point(位置情報),binary blob,timestamp。ドキュメント内でデータを構成するために配列や(Mapなどの)ネストしたオブジェクトを使うこともできます。

ドキュメント内の複雑な、ネストしたオブジェクトはマップ(maps)と呼ばれます。例えば、マップを使って、前の例のユーザーの名前を構成するとこのようになります。

📄alovelace(←ドキュメント)

name :
first : "Ada"

2020/8/14 Flutter : InheritedWedgetの解説文字起こし、翻訳。

This is the third video in Flutter Widget 101.

これはFlutter Widget 101の3番目のビデオです。

 

Previously,you learned about stateless and statefull widget.

前回は、ステートレスおよびステートフルウィジェットについて学びました。

 

In this video,I’ll be talkeng about InheritedWidget.

このビデオでは、InheritedWidgetについて説明します。

 

When your app gets larger and your widget tree …