クラスのカプセル化|getter/setter
ゲッター、セッターなにそれ、美味しいの???
美味しいよ🤤
Proverやriverpod使ってるときに、int _count;、int get count => _count;
こんな、文法をエディターのコード保管機能で自動で修正していたのだが、チンプンカンプンだった😵
Dartの文法への理解不足が原因なので勉強してみる。
カプセル化
変数をカプセル化するには「 _ 」を変数の前につけます。
class Person {
String _name;
int _age;
Person(this._name, this._age) {}
}
Javaだとこんな感じで書いていた。
public class Person {
private String name;
private int age;
}
TypeScriptだとこんな感じ
class Person {
private name: string;
private age: number;
}
ゲッター(get)
カプセル化の変数を取得するにはgetter(get)を使用します。
getterを作るにはアロー関数で「get」を宣言します。
void main() {
var person = Person("Jboy", 33);
print(person.name);
print(person.age);
}
class Person {
String _name;
int _age;
Person(this._name, this._age) {}
String get name => _name;
int get age => _age;
}
実行結果
Jboy
33
セッター(set)
カプセル化の変数を変更するにはsetter(set)を使用します。
setterを作るには「set」を宣言します。呼び出す際「()」を使わず「=」で新しい値を代入します。
void main() {
var person = Person("Jboy", 33);
print(person.name);
print(person.age);
person.nameChange = "Jboy Hashimoto";
person.ageDecrement = 33 - 10;
print("フルネームは:${person.name}");
print("${person.age}に若返った!");
}
class Person {
String _name;
int _age;
Person(this._name, this._age) {}
String get name => _name;
int get age => _age;
// よく見るとさっきと違って逆順になってる気がするけど?
set nameChange(String name) => _name = name;
set ageDecrement(int age) => _age = age;
}
実行の結果
Jboy
33
フルネームは:Jboy Hashimoto
23に若返った!
アロー関数の宣言・定義・呼び出し
//void型
void 関数名() => 処理;
//return型
型 関数名() => 戻り値;
適当にやったらできた😅
void main() => logMethod();
String sayHello({String name = ""}) => name;
void logMethod({String nameLog = "Jboy"}) => print("お名前は$nameLog");
実行の結果
お名前はJboy
アロー関数を使った場合、メソッドを1行しか書けなかった!
書き直してみたら、メソッドを追加できた🥳
// void main() => logMethod();
void main() {
logMethod();
int caluc = age(age1: 33, age2: 10);
ageLogMethod(result: caluc);
}
String sayHello({String name = ""}) => name;
int age({int age1 = 0, int age2 = 0}) => age1 - age2;
void logMethod({String nameLog = "Jboy"}) => print("お名前は$nameLog");
void ageLogMethod({int result = 0}) => print("年齢が$result若返りました!");
実行の結果
お名前はJboy
年齢が23若返りました!
最後に
SwiftをやReactをやっていたときに、基礎文法への理解不足が原因で、Promiseなにそれ?、美味しいの?
謎だらけでした。文法への理解が深まるとソースコードを読めるようになってくるので、文法の学習は後回しにしてはいけないと思いましたね。