0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「○○チェック関数」の罠

Posted at

「チェック」って機能名?

ときどき見かけませんか?

  • 通信チェック
  • DBチェック
  • データチェック

などの「○○チェック関数」。

でもこれ、機能名ではありません。ただの振る舞いを表しているだけです。

「チェック」が表しているもの

関数名を読む人は、

  • 何をする機能か
  • 入力は何か
  • 出力はどう使われるのか

を想像します。

ところが「○○チェック関数」と書かれていると、「何かをチェックする」という振る舞いしか伝わりません。目的も結果も見えてこないんです。

特に「データチェック」なんて名前は最悪で、戻り値が true でも false でも、結局何を意味しているのか曖昧になってしまいます。

具体例

「通信チェック関数」を例にしてみましょう。

  • 名前からわかるのは「通信を何かチェックするらしい」ということだけ
  • でも実際には「接続済みかどうかを判定する」のが目的だったりする

そうであれば hasConnection の方がずっと明確です。

実際のコードに現れる混乱

よくあるパターン:

実行結果 = 通信チェック(引数, &結果);
if (実行結果 == 失敗)
    return 失敗;
else
    if (結果 == 成功)
        データセット(成功);
    else
        データセット(失敗);

一見すると「通信チェックして結果を返してるんだな」と読めますが…
よく見ると「実行結果」と「結果」の2種類の値を返していて、判定が二重になっています。

つまり読み手はこう混乱するわけです:
戻り値は通信が正常かどうかを表すのかな?
でも「失敗」を見たあと、もう一度「失敗」を判断してるぞ?どういうことだ?バグか?

「○○チェック関数」を好むのはどんな人?(私見)

  • 1人で全部作りきった経験がある人
  • ロジック優先で考えるタイプの頭の良い人
    -「可読性よりスピード!」な現場にいる人

こういう環境では、名前にこだわるより「とにかく書いて回す」方が効率的だからです。

まとめ

関数やクラスに「check」と書こうとしたときは立ち止まって、考えてみましょう。
• それは機能や目的を表している?
• それとも単なる「振る舞いの説明」になってない?

「振る舞いを伝えるだけなら、関数定義を見てもらった方が確実」です。
だからこそ、名前では 機能や目的 を伝えることを意識しましょう。

例外

ただし「チェック」がすでにユビキタス言語化している場合(例:ドメインで「○○チェック」という言葉が共通認識になっている場合)は、そのまま使うべきです。無理に置き換えると逆に混乱します。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?