鋼の錬金術師某錬金術の漫画にかけたコピペエンジニアリングの話です。
錬金術の3要素
某漫画の中で錬金術の3要素は「理解→分解→再構築」となっています。
これはコピペエンジニアリングも同様です。
この3要素がちゃんと出来ればコピペエンジニアリングが出来るようになっていきます。
今回は有名なFizzBuzzを参考にして進めてみます。
<?php
for ($i = 1; $i <= 100; $i++) {
if (($i % 3 === 0) && ($i % 5 === 0)) {
echo 'FizzBuzz';
} elseif ($i % 3 === 0) {
echo 'Fizz';
} elseif ($i % 5 === 0) {
echo 'Buzz';
} else {
echo $i;
}
echo PHP_EOL;
}
理解
コードをコピペする前や後、コピペして実行する時にコードの理解をしてください。
1つ1つの要素を理解して、コードが何をやっているか分かる必要があります。
理解を進めるためにコードにコメントを書いていきます。
<?php
// 1-100までループ
for ($i = 1; $i <= 100; $i++) {
if (($i % 3 === 0) && ($i % 5 === 0)) {
// 3と5で割り切れたらFizzBuzz
echo 'FizzBuzz';
} elseif ($i % 3 === 0) {
// 5で割り切れたらFizz
echo 'Fizz';
} elseif ($i % 5 === 0) {
// 5で割り切れたらBuzz
echo 'Buzz';
} else {
// それ以外は数字
echo $i;
}
// それ以外は数字
echo PHP_EOL;
}
これでこのコードが何を行っているか理解できる状態になりました。
※サンプルとしてコメントを書いているだけなので実際は書かなくても大丈夫です。
分解
今度はコードを分解していきます。
<?php
// for start-------------------------------------------
for ($i = 1; $i <= 100; $i++) {
// if start----------------------------------------
if (($i % 3 === 0) && ($i % 5 === 0)) {
echo 'FizzBuzz';
} elseif ($i % 3 === 0) {
echo 'Fizz';
} elseif ($i % 5 === 0) {
echo 'Buzz';
} else {
echo $i;
}
// if end------------------------------------------
echo PHP_EOL;
}
// for end---------------------------------------------
コメントを使用して分けましたが大きく分けて繰り返しを行うfor句と条件によって出力を変更するif句に分けることが出来ます。
再構築
分解したコードを再構築してみます。
分解したfor句とif句を再構成してみると下記のようになります。
<?php
function fizzbuzz($i){
if (($i % 3 === 0) && ($i % 5 === 0)) {
echo 'FizzBuzz';
} elseif ($i % 3 === 0) {
echo 'Fizz';
} elseif ($i % 5 === 0) {
echo 'Buzz';
} else {
echo $i;
}
echo PHP_EOL;
}
for ($i = 1; $i <= 100; $i++) {
fizzbuzz($i);
}
if句を関数化しましたが、処理自体に変更はなく、またif句とfor句を分けたことで役割をわけることが出来ます。
まとめ
簡単な説明ですが、コピペする第1段階の理解が重要になります。
理解出来なければ、分解も、再構築も正しく行うことは出来ません。
コピペをする上で注意するべき点は理解をせず、分解もせず、そのままコードを使用してバグを出さないことです。
「理解→分解→再構築」を行い、プロジェクトごとに最適なコードへの再構築を行ってください。
今回、コードで説明を行いましたが、この3要素はビジネスにも応用が効くので活かすことが可能です。
ちなみにハガレン某錬金術漫画は名作!
0 件のコメント :
コメントを投稿