社内LTやとあるイベントのLTで使用したショートコーディングの紹介スライド
美しいコード?
View Slide
自己紹介- エキサイト株式会社 ニュースメディア技術sec- PHP- 学生時代の専門は計算理論競技プログラミングを熱心にやっていました
美しいコード書いてますか
優れた設計のコード
優れた設計のコード見た瞬間に理解できるコード
優れた設計のコード見た瞬間に理解できるコードこれらは美しいリーダーブルコードにそんな感じのこと書いてあった
優れた設計のコード見た瞬間に理解できるコードこれらは美しい美しいのはこれらだけではない!
美しいショートコーディングの世界
ショートコーディングとはプログラムのソースコードがどれだけ短く書けるかを探求すること別名: コードゴルフ
ショートコーディングをやってみよう!環境:Ubuntu 16.04.1 LTSPHP 7.0.8-0ubuntu0.16.04.2 (cli)php.iniのerror_reporting(0);short_open_tag => On
問題 Fizz Buzz1から30までのFizz Buzzの結果を出力しなさいただし、各発言を1行に出力すること例:12Fizz4BuzzFizz
補足:FizzBuzzとは1以上の整数を順に、以下のルールに従って発言していくゲームである。3で割り切れる時には「Fizz」5で割り切れる時には「Buzz」3と5の両方で割り切れる時には「FizzBuzz」それ以外の時はその数字を発言する参考AOJ2441 FizzBuzz
// 143bytefor($i=1;$i<=30;$i++){if($i%3 == 0 && $i%5 == 0){echo "FizzBuzz\n";} else if($i%3 == 0){echo "Fizz\n";} else if($i%5 == 0){echo "Buzz\n";} else {echo "{$i}\n";}}
// 97byte 重複は排除!排除!for($i=1;$i<=30;$i++){if(!($i%3))echo 'Fizz';if(!($i%5))echo 'Buzz';else if($i%3)echo $i;echo "\n";}
// 78byte 三項演算子はショートコーディングの味方for(;$i++<30;){$s = ($i%3?'':'Fizz') . ($i%5?'':'Buzz');$s = $s?$s:$i;echo"$s\n";}
// 71byte さらに三項演算子を活用するfor(;$i++<30;){echo(($i%3?'':'Fizz') . ($i%5?'':'Buzz'))?:$i;echo"\n";}
// 67byte 未定義定数は文字列として扱わられるfor(;$i++<30;){echo(($i%3?'':Fizz) . ($i%5?'':Buzz))?:$i;echo"\n";}
// 63byte 職人達は60byte未満らしい…
まとめショートコーディングとはプログラムのソースコードがどれだけ短く書けるかを探求することプログラミングは”道具”?“プログラミングをする” “プログラミングを読む”がコンテンツになるといいなーと思っております