1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dartについて学んでみる③

Last updated at Posted at 2022-04-01

クラスのカプセル化|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なにそれ?、美味しいの?
謎だらけでした。文法への理解が深まるとソースコードを読めるようになってくるので、文法の学習は後回しにしてはいけないと思いましたね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?