Upgrade to Pro — share decks privately, control downloads, hide ads and more …

美しいショートコーディングの世界

hiroki.saito
December 24, 2016

 美しいショートコーディングの世界

社内LTやとあるイベントのLTで使用したショートコーディングの紹介スライド

hiroki.saito

December 24, 2016
Tweet

More Decks by hiroki.saito

Other Decks in Programming

Transcript

  1. 美しいコード?

  2. 自己紹介 - エキサイト株式会社 ニュースメディア技術sec - PHP - 学生時代の専門は計算理論 競技プログラミングを熱心にやっていました

  3. None
  4. None
  5. None
  6. None
  7. 美しいコード書いてますか

  8. 優れた設計のコード

  9. 優れた設計のコード 見た瞬間に理解できるコード

  10. 優れた設計のコード 見た瞬間に理解できるコード これらは美しい リーダーブルコードにそんな感じのこと書いてあった

  11. 優れた設計のコード 見た瞬間に理解できるコード これらは美しい 美しいのはこれらだけではない!

  12. 美しい ショートコーディングの世界

  13. ショートコーディングとは プログラムのソースコードが どれだけ短く書けるかを探求すること 別名: コードゴルフ

  14. ショートコーディングをやってみよう! 環境: Ubuntu 16.04.1 LTS PHP 7.0.8-0ubuntu0.16.04.2 (cli) php.iniの error_reporting(0);

    short_open_tag => On
  15. 問題 Fizz Buzz 1から30までのFizz Buzzの結果を出力しなさい ただし、各発言を1行に出力すること 例: 1 2 Fizz

    4 Buzz Fizz
  16. 補足:FizzBuzzとは 1以上の整数を順に、以下のルールに従って発言していくゲームである。 3で割り切れる時には「Fizz」 5で割り切れる時には「Buzz」 3と5の両方で割り切れる時には「FizzBuzz」 それ以外の時はその数字を発言する 参考 AOJ2441 FizzBuzz

  17. <? // 143byte for($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"; } }
  18. <? // 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"; }
  19. <? // 78byte 三項演算子はショートコーディングの味方 for(;$i++<30;){ $s = ($i%3?'':'Fizz') . ($i%5?'':'Buzz');

    $s = $s?$s:$i; echo"$s\n"; }
  20. <? // 71byte さらに三項演算子を活用する for(;$i++<30;){ echo(($i%3?'':'Fizz') . ($i%5?'':'Buzz'))?:$i; echo"\n"; }

  21. <? // 67byte 未定義定数は文字列として扱わられる for(;$i++<30;){ echo(($i%3?'':Fizz) . ($i%5?'':Buzz))?:$i; echo"\n"; }

  22. // 63byte 職人達は60byte未満らしい… <?for(;$i++<30;){echo(($i%3?'':Fizz).($i%5?'':Buzz))?:$i,"\n";}

  23. まとめ ショートコーディングとは プログラムのソースコードがどれだけ短く書けるかを探求すること プログラミングは”道具”? “プログラミングをする” “プログラミングを読む” がコンテンツになるといいなーと思っております