はじめに
最近、人のコードを見る機会が増え、色々と気づくことがあったのでもういちど基本原則から学び直そうと思い、ソフトウェア開発で重要とされている原則を調べてみました。
その中でも意外と見落としがちと感じた原則2つをまとめます。
ここではあくまで初心者に向けての説明になるので詳細な解説は省きます。
DRY原則
DRY原則は、「Don't Repeat Yourself」の略で、同じ情報を二度書かないという意味です。この原則は、情報の重複を避けることで、コードの量を減らし、保守性を向上させることを目指しています。
現場ではコピペ実装や、納期に追われる実装をしていたりするとよく発生するのでこれを意識して実装することは非常に重要だと思います。
DRY原則の適用例
以下に、Go言語でDRY原則を適用した例を示します。
// DRYを適用しない例
func add(a int, b int) int {
return a + b
}
func subtract(a int, b int) int {
return a - b
}
// DRYを適用した例
type Calculator struct {
a int
b int
}
func (c *Calculator) add() int {
return c.a + c.b
}
func (c *Calculator) subtract() int {
return c.a - c.b
}
コードのみで見るとかなり単純な原則ですね。
説明にもありますが、「情報の重複を避ける」を目的としているのでコードだけでなく、ドキュメントやDBスキーマについても当てはまります。
チーム開発の際は実装部分や方針などあらかじめ擦り合わせておき、その上でこの原則に則って実装することが大切だと感じました。
KISS原則
続いてKISS原則です。
KISS原則は、「Keep It Simple, Stupid」の略で、コードをできるだけシンプルに保つことを目指しています。この原則は、複雑さがソフトウェアのバグを引き起こし、保守性を低下させるという考えに基づいています。
また「現在の機能に必要な実装のみを行う」という意味もあります。
今後実装するならあらかじめ組み込んでおこう。と聞くと一見するといいように聞こえますが、現状使われることのないコードが増えることはコードの可読性を低下させる恐れがあり、思わぬバグにつながる可能性があります。
実際の現場では急な仕様変更等が発生した場合、既存の実装からできるだけ崩さずに実装することが多いのでコードが複雑になりがちです。
筆者も解読に時間が必要なSQLや謎な処理をしているコードをしばしばみてきたのでこの原則はあらためて重要だなと感じました。
KISS原則の適用例
以下に、Go言語でKISS原則を適用した例を示します。
// KISSを適用しない例
func calculate(a int, b int, operation string) int {
switch operation {
case "add":
return a + b
case "subtract":
return a - b
default:
panic("Invalid operation")
}
}
// KISSを適用した例
func add(a int, b int) int {
return a + b
}
func subtract(a int, b int) int {
return a - b
}
こちらもこのレベルだとすぐに理解できますが、実際のプロジェクトや実装者がいないシステムなどでは
「ん?なにこれ、どういうこと?」
みたいなことは多々あります。
その度に時間をかけるわけにもかないので3日後の自分が理解できなさそうであれば一度立ち止まり、俯瞰して見ることが大事かもしれません。
まとめ
ある程度経験を積んでから改めて原点回帰してみると「意外と守られていない現場もあったなぁ」と感じます。
かなり基本なところなのでこの記事から知る人は少ないと思いますが初めて知った人も、知っていた人も改めてこの原則を守り、後世につなぐシステムを作りましょう!!