こう 聞かれます
- 「1 つの
関数に 1 つの 責務、とは どういう ことですか」 - 「長い
関数が あったら、 どう 分けますか」 - 「関数を
分けすぎると、 かえって 読みにくくなりませんか」 (裏から聞く形)
面接官が 見ている点
- 「短くする」ことと
「役目で分ける」 ことを 区別しているか - 分けるか
どうかを 決める 物差しを、 自分の 言葉で言えるか - 分けた
あとも 動きが 変わっていない ことを、 どう 確かめるかまで話せるか
短い答え
- 1 つの
関数には 1 つの 仕事だけを させ、 その 仕事を 名前で 1 言で 言える 形に する、という ことです。 - 入力の
確かめ、 計算、 表示の 形づくりのように、 変わる 理由が 違う 仕事は 別の 関数に 分けます。 - 分けると、
1 つの 直しが 届く 範囲が 狭くなり、 部品ごとに 試しやすく、 ほかの 所でも 使い回せます。
少し 詳しい答え
注文の 文を 作る 処理を分ける
数量を
JavaScript
function isValidQty(qty) {
return Number.isInteger(qty)
&& qty > 0;
}
function total(price, qty) {
return price * qty;
}
function toLabel(yen) {
return yen + " 円";
}
function orderText(price, qty) {
if (!isValidQty(qty)) {
return "数量が正しくありません";
}
const yen = total(price, qty);
return toLabel(yen);
}
console.log(orderText(300, 4));
console.log(orderText(300, 0));1200 円
数量が正しくありません「円の
分けるか どうかの物差し
- 名前で言えるか
「〜して〜して〜する」と、 名前に 「と」が 要るなら、 仕事が 2 つ以上入っています - 変わる
理由が 1 つか 表示の 決まりが 変わった とき、 計算の 決まりが 変わった ときに、 同じ 関数を 直すことに なるなら 分けどきです - 分けすぎない 1 か
所でしか 使わず、 名前を 付けても 読みやすくならない 数行まで、 無理に 分ける 必要は ありません
分けた
作った
よく ある間違い
- 「1 つの
関数は 何行以内」と 行数だけで話す物差しは 行数ではなく、 役目と 変わる理由です - 何でも
細かく分ける 名前を 付けても 意味が 増えない 分け方は、 読む人に 行き来を させるだけです - 分けた
あとに 確かめない 分ける ときに 順番や 条件を 取り違えると、 動きが 変わります。 分ける 前後で 同じ 答えが 出るかを 確かめます
深掘りの問い
- 「関数の
外の 値を 書き換える 関数は、 どう 扱いますか」 計算だけを する 関数と、 保存や 表示のように 外を 変える 関数を 分けると、 計算の 側を 試しやすくなる、と答えます - 「長い
関数を 分けたら、 動きが 変わってしまいました。 どう 防ぎますか」先に 今の 動きを 確かめる テストを 書き、 少しずつ分けては 回す、と答えます - 「クラスや
画面の 部品でも 同じ 考え方を 使いますか」 使います。 1 つの 部品に 1 つの 役目を 持たせ、 変わる 理由ごとに 分ける、と答えます