デメテルの法則

  • 2018年5月28日
  • 2018年5月28日
  • 未分類

wikipediaから引用

基本的な考え方は、任意のオブジェクトが自分以外(サブコンポーネント含む)の構造やプロパティに対して持っている仮定を最小限にすべきであるという点にある。

 この法則の考え方の目的はコーディング上のケアレスミスによるバグの発生予防にあります。この考えは特にグローバル関数を用いずゲッター、セッター、ローカル関数を用いることで実現されます。
 各種プログラミング言語にはグローバル変数という便利な仕組みがあります。グローバル変数はクラス、メソッドをまたいでどこからでも参照できる変数です。グローバル変数を用いた場合、様々な制約を無視してコーディングができます。一方でグローバル変数を多用して巨大なり長大なりなコーディングを行った場合、思わぬところでグローバル変数が使用されていて思わぬ動作を起こすという事故を引き起こします。
 getter、setterはあるオブジェクトの保持する変数をget(呼び出し、受取)、set(代入)する目的の関数のことです。例:オブジェクトAの持つ変数nameをgetする関数nameGetter、オブジェクトBの持つ変数telに任意の値をsetする関数telSetter
 デメテルの法則にしたがった場合、グローバル変数を多用することはなく、getter、setterを用いてコーディングを行います。これを行った場合、不意にある値を呼び出すことそのものが少なくなるため、ある値に想定外の動作をさせるということが減ります。つまりグローバル変数と大して変わらぬ便利さで安全にコーディングを行えます。
 一方でデメテルの法則を守った場合、コーディングの際の手間が増えます。ある変数を作るたびにgetter、setterを作るべきか考える必要があったり、そもそも打ち込む文字数が増えたりします。最も打ち込む文字数の方に関してはIDE(統合開発環境)がgetter、setterをショートカットキーでパパっと作ってくれたり、打ち込みたい関数名を予測してくれたりで楽ができます。また、IDEを使う前提を考えた場合、IDEが色なりなんなりで今扱っている変数がグローバルなのかローカルなのか等々色々示してくれます。結局安全性と生産性のトレードオフになりがちなので、こういう考え方があるということを頭に入れておくぐらいがいいのかもしれません。
 getter、setterを用意しているからと言っていたるところでいたるところをガンガン書き換えるプログラミングはやめましょう。手間もかかるしバグも起きるしでただ辛いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG