リーダブルコード等を読んでも
独学でリーダブルコードをお読みになりましたか。尊敬します。
さて、ここからは個人的な考えなので、
「ふーんそういう考え方もあるのか」
程度に読んでいただけると幸いです。
大抵の場合、同士をつけない関数・メソッド名は、
「固定された値で、変更されない」
というのが鉄則だと思います。
しかし、例にあげていただいたクラスのメソッドの場合、メソッドのオーバーロード(多重定義)が使える言語であれば、以下のようにして名前を書き換える機能を実装することもできると思います。
python
1# ちなみにこのコードは動きません。「同一のメソッド名がある」とエラーが出ると思います。
2class User:
3 self.name = 'anonymouse'
4 self.email = 'john@due.xxx'
5
6 def name(self):
7 return self.name
8
9 def name(self, name):
10 self.name = name
11 # 以下省略
しかし、上のコードがもし動いたとして、以下のようなコードを実行してしまうと、nameプロパティが「(空文字列)」になってしまいます。
python
1tmp_user = new User()
2tmp_user.name('')
「使う側が気をつければいい」
という話になるかもしれませんが、プログラミングはあくまで、
「自分や誰かが楽するためにする作業」
だと私は思うので、このように混乱を招くメソッドを設計するのはよろしく無い気がします。
また、以下のようなケースもあるかもしれません。
python
1class User:
2 self.name = 'anonymouse'
3 self.email = 'john@due.xxx'
4
5 def name():
6 # DB書き込み処理
7 return self.name
こうしてしまうと、
「このインスタンスのnameを呼び出して画面に描画しよう」
とした時に、不必要にDBへ書き込み処理を行うということが起こって、場合によってはDBサーバーへの高負荷に繋がるかもしれません。
これも、
「使う側が気をつければいい」
という話かもしれませんが、先ほど申した様に、プログラミングはあくまで、
「自分や誰かが楽するためにする作業」
だと私は思うので、このように混乱を招くメソッドを設計するのはよろしく無い気がします。
ちなみに、メソッドで返ってくる値とは別に裏側で他の処理をすることを「副作用」と呼びます
閑話休題
なので、私個人としては、
「この関数・メソッドで呼び出される値は、前の処理で一回設定されたら変更されることはないし、どこにも副作用を与えない」
もしくは、
「この関数・メソッドを呼んだことによって演算が行われても、どこにも副作用を与えない」
とはっきりしていれば、動詞は省いてしまっていいのかなと思います。
参考になれば幸いです。
P.S.
有識者の方々へ、絶対にもっと良い説明があると思うので、どんどん解答を上げてください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/05 00:21