不評だった私のプログラム

以前、私の作ったプログラムの関数が非常に不評で困ってしまった事があった。
実際、それを作った時も「理解して貰いにくそうだな」とは密かに思っていたのだけど、その予想を超えて遥かに不評だった。
と言うのも、私が不評になるだろうと思ったポイントと、実際に受け入れて貰えなかったポイントが違っていたのだ。
私が意図したポイントがNGで、私が思い悩んで仕方が無く決めたポイントは問題に上がらずスルーだった。
しかも、私の意図したポイントは、まさに私がそれを必要として実装した箇所だったので、本当に驚いてしまった。
今回、ここにそのロジック箇所だけを抜き出して記しておきたい。

No 前提
条件
条件
1
条件
2
肯定的
チェック
否定的
チェック
1 × False True
2 True False
3 × × False False
4 × False False
5 × False True
6 True False
7 × × × False False
8 × × False False
9 × × False False
10 × False False
11 × × False True
12 × False False
13 × False False
14 True False

「どう記したら分かり易いかな?」はあまり考えなかったので、こんな表になった。
とりあえず、関数に与える必須引数が「前提条件」で、任意引数が「条件1」と「条件2」だ。
実際は、任意引数の方は2つに限らずいくつでも設定可能だ。
そして、その条件に対して返す値が、右の2列で、私はそのために2つの関数を作った。
便宜的にここでは「肯定的チェック」と「否定的チェック」となっている。
行Noの1-2では、任意引数を与えなかったと言う特殊な場合で、3-6は任意引数が1つの場合、7-14は任意引数が複数で2つの場合の例になっている。
動作は例えば、データベースのテーブル上で”前提条件”に合う行を取り出し、「肯定的チェック」ならば「条件」に適合する行を返す、「否定的チェック」ならば「条件」に完全に適合しない行を返すようなイメージになる。
(ただ、この中で行1,2,で「否定的チェック」の返している値は、例外になると思う。)
ところが!実際は、行1,2,については多くの人に「え?いいんじゃない?」と言われ、特に悪いと指摘された点は「否定的チェックの返す値が、完全に肯定的チェックの裏返しでない」と言う点だった。
私はこれには驚愕してしまった。
「そんな動作をする関数が欲しければ、肯定的チェックで返って来た値のTrueとFalseを逆に見て欲しい。」
「同じ関数を2つ作るつもりは無い」
「この2つの関数はこれで意味がある」
と主張したのだけど、受け入れられず。
泣き寝入り状態に。
私が
「否定的チェックの1,2,の場合については、確かに迷いながら作って、分かりにくい箇所に思う。I’m very sorry。」
(一部、時事ネタジョーク→その当時、この言い回しは話題では無かったけどね)
と言うのに、
「そこはそれでいいんじゃない?」
と言う返事が帰ってきたのは、つまり*本当に1つの関数の裏返しの結果を返す関数の存在を期待している*と言う事に感じた。
「まさか、そんな!?それは重複じゃん!」
「て、言うかそれは、前提条件が見えなくなるから作りたくなかった」
「意図したチェックを行いたい場合、使い慣れた関数を複数個組み合わせて行ってくれ!」
「てか、今からでもその裏返しの関数を作ったらいいのか!?」
「とりあえず、関数名が悪かったのは認める。I’m sorry。」
そして、結果「否定的チェック」は封印される事になった。
みんなも気を付けよう!
作った自分がめちゃ悲しい気持ちになるから。
これは私は4つの機能を提供したつもりだったのに、その中で1つの機能しか認められないと言う事だった。
肯定的チェックを普通に使うだけでは、「不便もあるに違いない」と思うのだけど、、、。
ちなみに、私はこれらの関数の利用方法を説明するドキュメントを作っていた。その他の関数(前提条件が無いバージョンなど)も含めたそのドキュメントは概ね好評だった。
しかし、否定的チェックを間違って利用したケースが報告され、これが問題に上がった。
私としては使いやすいようにデザインしたつもりだったのに、、、。
この記事はコメント大歓迎!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です