ほげほげIfNeededはあまり良いメソッド名ではないのではないかという提案

公開日:2018-12-26
最終更新:2018-12-26

ほげほげIfNeededはあまり良くないメソッド名ではないか

Swiftに限らず、iOS向けのコードを書いていると、よく「ほげほげIfNeeded」というメソッドを見かけます。

Appleが用意しているiOS SDKでもよく見かけますし、様々なOSSライブラリでもよく見かけます。

例えば iOS SDKの場合、UIKitのUIViewにある、「layoutIfNeeded」とか、あまり使わないメソッドtだと「updateConstraintsIfNeeded」とかもそうでしょうか。

さて、ここでよく使われている「ほげほげIfNeeded」、実は僕はあまり良いメソッド名ではないと考えています。

ここでは、このような「ほげほげIfNeeded」が良くないのではないかという提案をしたいと思います。

なぜよくないのか

まず上記メソッドは下記のような流れで呼ぶと思います。

let view = UIView()  
view.backgroundColor = UIColor.white  
   中略  
view.layoutIfNeeded  

この書き方がそこまで悪いとは思わないのですが、このメソッドの場合

どこの変更がトリガになってlayoutがneededになったのかわかりにくい

という問題点があるように思います。

言い換えるならば、

layoutし直さなくてはならない変更がどれなのか、てきとーにプログラムを書いた場合にわかりにくくなる」ということです。

なぜ、ほげほげしなくてはならない変更がどれなのかを知る必要があるのか

たとえば、ほげほげIfNeededを次のようなメソッドだと考えてみましょう。

public func postDataIfNeeded() {  
     中略  
}  

上記メソッドは「データをpostする必要があったときにデータをポストする」メソッドのように読めます。

さてここで皆さんに質問です。

皆さんはこのメソッドお気軽に呼べますか?

僕なら呼べません

なぜなら

  • どの条件が成立したときにデータをサーバーにPostするのか、パット見わからない

からです。

これがわからないということは、

postDataIfNeededを呼んだときの計算量が事前によく算定できない

という結果を生むと思います。

送っちゃってもいいじゃんという意見について

送っちゃってもいいじゃん!という意見がありますが、それも1つの選択だと思っています

(サーバー側がきちんと対応できて、UI的に問題もないなら、特に問題はないと思っています)

ただ僕の場合、気持ち悪いと言う感想が出てきてしまいます・・・

呼び出す前に条件を知る必要があるかどうかについて

これほんと悩みました。

postDataIfNeededのような、「条件が成立した場合計算コストが多大であることが事前に予測できる」処理の場合、条件を事前に知ることは意味があることだと思います。

それに対し、layoutIfNeededのような「条件が成立した場合の計算コストが少ない、ないしは許容範囲内に収まるであろうことが予期できる」処理の場合、「プログラマーがそれを知る必要があるのかどうか」については少し疑問符が残ることも事実です。

上記の2点を考慮すると、「ほげほげIfNeededは良いメソッド名とは言えないが、必ずしも悪いメソッド名ではないのではないか」というところに僕の中で話が落ち着きました。

書きたい放題書いてみて

皆さん色んな意見があるところだと思います。

僕は「自分の意見が絶対だ!」なんていう気はさらさらないので、皆さんの意見を尊重したいと思っています。

思考の片隅に、今までのような主張をしていた人がいたなー、みたいに思ってもらえると幸いです。

記事が少しでもいいなと思ったらクラップを送ってみよう!
0
+1
@h1d3mun3'の技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする