私がプログラマーとして就職して2〜3年経ったころ、当時の上司からある本を紹介されました。
増田亨氏の「現場で役立つシステム設計の原則」です。
増田さんは設計の分野で広く知られている方です。
最近では増田さんが担当された「ドメイン駆動設計をはじめよう」が出版されたのは記憶に新しいですね。
ブログで技術情報を発信している私が読みにくいコードを書いてしまっては示しがつきません。
今一度、こちらの書籍を読み直して自身のコードをわかりやすくしていきたいと思います。
第1章「小さくまとめてわかりやすくする」
この章では、「変数の名前はわかりやすく」「意味のまとまりで段落を区切る」といったコードの見た目のわかりやすさから始まり、「メソッドやクラスは小さく」「オブジェクトは不変(イミュータブル)にする」などといった基本テクニックが書かれています。
この書籍のサンプルコードは Java です。
このブログは React で書くことが多いですが、React にも通じる部分は多いです。
「オブジェクトは不変(イミュータブル)にする」なんかはまさにそうです。
「不変にする」というのは、変数に上書きをして使い回すのではなく、値が別なら変数も別にせよ、ということです。
React では、配列の state を更新するときは以下のように言語レベルでイミュータブルに扱うことが推奨されています1。
export default function SomeComponent() {
const [array, setArray] = useState<string[]>([])
const handleClick = () => {
const newArray: string[] = array.slice()
newArray.push('value')
setArray(newArray)
}
return (
<div>
<button onClick={handleClick}>button</button>
</div>
)
}
あとは、React に限った話ではなく JavaScript のセオリーですが、var
や let
は基本使わず const
を使用せよ、というものもありますね。
let
はどうしても使わなければならないなら使っても大丈夫ですが、var
は絶対NGです。var
は再代入・再宣言が可能でスコープも広めなので、知らないうちに変数を更新してしまいバグにつながってしまいます。
私が最近こっそり勉強している Scala も、変数は基本的に再代入不可の val
で宣言せよ、というふうに言われています。
このように「オブジェクトは不変(イミュータブル)にする」を一つとってみても、本書の内容は十分に応用可能です。
本書は全部で10章ありなかなか読み応えがありますが、文章はとてもわかりやすく書かれています。
しっかりと自身の血肉にしていきたいと思います。
- 厳密には、これは「state の変更を React に知らせるためにイミュータブルにする」という文脈での話です。 ↩︎
コメント