便利ですよね、プロパティ。
public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } }
って定義すれば。
Person person = new Person() { FirstName = "hogemura", LastName = "hogeo", Age = 20, };
ってできるし、プロパティは public な変数じゃなくて、 Getter Setter の代わりなので呼び出し元の IF を変更させることなく変更することができる。
public class Person { private string _firstName = null; public string FirstName { get { "☆ " + _firstName; } set { _firstName = value; } } public string LastName { get; set; } public int Age { get; set; } }
うむうむ。
これを java で書くとしたら Person クラスがこうなって
public class Person { private String firstName_ = null; private String lastName_ = null; private int age_ = 0; public String getFirstName() { return firstName_; } public void setFirstName(string firstName) { firstName_ = firstName; } public String getLastName() { return lastName_; } public void setLastName(string lastName) { lastName_ = lastName; } public int getAge() { return age_; } public void setAge(int age) { age_ = age; } }
使うときは
Person person = new Person(); person.setFirstName("hogemura"); person.setLastName("hogeo"); person.setAge(20);
うわぁぁぁぁ、java ひでー、まじひでー (^q^)
それに比べて C# はすげーべんりべんりーまじべんりー・・・・・って、うぉらぁ ヽ(`Д´)ノ 彡┻━┻
ていう流れは強引かもしれないけど・・・java だと行数が多いのもあって違和感バリバリ感じる人が多いと思う。
まぁ、↓こう書くべきだよねって思うんじゃないだろうか。
public class Person { private String firstName_ = null; private String lastName_ = null; private int age_ = 0; public Person(String firstName, String lastName, int age) { firstName_ = firstName; lastName_ = lastName; age_ = age; } public String getFirstName() { return firstName_; } public String getLastName() { return lastName_; } public int getAge() { return age_; } }
やってるのは、
- インスタンスの生成に必要な物はコンストラクタで渡す
- カプセル化する
- 必要なメソッドだけ定義する
- 変更されてほしくないものは外に見せない
これはもちろん C# でもできる。当然。
public class Person { public Person(string firstName, string lastName, int age) { FirstName = firstName; LastName = lastName; Age = age; } public string FirstName { get; private set; } public string LastName { get; private set; } public int Age { get; private set; } }
java と同じ。もちもち。
僕が気になるのは
プロパティを多用しすぎて、いろいろ疎かになってんじゃね?
ってこと。見せなくていいものをチラつかせて、インスタンスを作るにもチマチマプロパティに右から左、右から左。
- このインスタンス生成に必須なものって何?
- 触られたくないものって何?
- どう使って欲しいの?
ってのが放置されてオブジェクトがただの "入れ物" になってることが非常に悲しい気持ちにさせる。その原因になってるのがプロパティと考える。"良い感じにかけている" と錯覚させている。"あると便利だけど、まっさきに使うものじゃない" ってのが僕の考え。
僕の周りだけなのかよく分からん。うまくいえない、風呂にいこう。