OAOO原則
プログラミングとかにおける「こーするべきだよね」な思想だよ
「同じコードを何度も書くな!」な考え方だよ
「OAOO」の部分は「Once And Only Once」の略だよ
簡単に書くよ
OAOO原則(読:オーエーオーオーゲンソク?)とは
「同じコードを何度も書くな!」原則のこと。
もう少し細かく書くと
プログラミングにおいて「同じ処理をいろんな場所に書くんじゃねぇ!」な考え方のこと
です。
詳しく書くよ
「Once And Only Once(ワンス・アンド・オンリー・ワンス)」の略で「OAOO原則」です。
適当に意訳すると「一度だけったら一度だけなんだい!」つまり
重複させんな!
と言っています。
では何を重複させないのか?
ソースコードに書く「処理」です。
例えばピヨ太君がスーパーピヨピヨシステムを作っているとします。
まずはログイン機能を作りました。
ログイン機能ではログインしているかをチェックし、ログインしていなかったらログイン画面を表示します。ログインしていたらメニュー画面を表示します。
1.ログインしてますか~?チェック処理
2-1.未ログイン:ログイン画面表示処理
2-2.ログイン済:メニュー画面表示処理
の流れですね。
ちなみに「ログインしてますか~?チェック処理」はさらに細かく見ると
(1)IDチェック
(2)パスワードチェック
があるとしましょう。
ログイン画面表示処理の方は
(1)新着ニュース表示
(2)本日のお天気表示
(3)今日の運勢表示
もやるとしましょうか。
なんかいろいろ表示されるログイン画面なのです。
そうするとログイン画面の表示は
1.ログインしてますか~?チェック処理
(1)IDチェック
(2)パスワードチェック
2-1.未ログイン:ログイン画面表示処理
(1)新着ニュース表示
(2)本日のお天気表示
(3)今日の運勢表示
2-2.ログイン済:メニュー画面表示処理
の流れになります。
次にピヨ太君は掲示板機能を作りました。
掲示板機能ではログインしている人のみ使えますので、まずはログインしているかチェックして、ログインしていれば掲示板を表示、ログインしていなければログイン画面を表示するようにしました。
1.ログインしてますか~?チェック処理
(1)IDチェック
(2)パスワードチェック
2-1.未ログイン:ログイン画面表示処理
(1)新着ニュース表示
(2)本日のお天気表示
(3)今日の運勢表示
2-2.ログイン済:掲示板画面表示処理
の流れです。
さて、ここでログイン画面の表示処理と掲示板画面の表示処理を見比べてみましょう。
■ログイン画面
1.ログインしてますか~?チェック処理
(1)IDチェック
(2)パスワードチェック
2-1.未ログイン:ログイン画面表示処理
(1)新着ニュース表示
(2)本日のお天気表示
(3)今日の運勢表示
2-2.ログイン済:メニュー画面表示処理
■掲示板画面
1.ログインしてますか~?チェック処理
(1)IDチェック
(2)パスワードチェック
2-1.未ログイン:ログイン画面表示処理
(1)新着ニュース表示
(2)本日のお天気表示
(3)今日の運勢表示
2-2.ログイン済:掲示板画面表示処理
おやおや?
1.ログインしてますか~?チェック処理
(1)IDチェック
(2)パスワードチェック
2-1.未ログイン:ログイン画面表示処理
(1)新着ニュース表示
(2)本日のお天気表示
(3)今日の運勢表示
の部分はどちらも同じですね。
これをそのまま何も考えないで作ったら、同じ処理が散らばってしまいます。
例えば「今日の運勢表示」処理がログイン画面と掲示板画面の両方にありますよね。
もし「あ~、今日の運勢じゃなくて明日の運勢を表示しよっか」となった場合、2か所直さなくてはいけません。
めんどっちーですね。
このような事態を避けるために、まとめられるものはまとめちゃいましょうよ~という考え方がOAOO原則です。
同じ処理は1つだけ!似たような処理もできるだけまとめちゃおう!な考え方です。
具体的なやり方は、関数化でしょうね。
同じ処理は関数にまとめて、そいつを呼び出す形にしてあげます。
このように「同じコードを何度も書きなさんな」な考え方がOAOO原則です。
ちなみに、OAOO原則と似たような意味の言葉で「DRY原則」というものがあります。
DRY原則の方は「同じような情報をいろんな場所に置くんじゃねぇ!」原則です。
OAOO原則とDRY原則は混同されている場合も多いのですが、OAOO原則の方が少し狭い意味になります。
OAOO原則の方はコードの書き方における、DRY原則の方はシステム全体における「重複させんな!」な思想です。
一言でまとめるよ
まぁ「OAOO原則」って単語が出てきたら「コードの書き方における「重複させんな!」な思想なんだな~」と お考えください。






