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. 美しいコード?

    View Slide

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

    View Slide

  3. View Slide

  4. View Slide

  5. View Slide

  6. View Slide

  7. 美しいコード書いてますか

    View Slide

  8. 優れた設計のコード

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide


  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";
    }
    }

    View Slide


  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";
    }

    View Slide


  19. // 78byte 三項演算子はショートコーディングの味方
    for(;$i++<30;){
    $s = ($i%3?'':'Fizz') . ($i%5?'':'Buzz');
    $s = $s?$s:$i;
    echo"$s\n";
    }

    View Slide


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

    View Slide


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

    View Slide

  22. // 63byte 職人達は60byte未満らしい…

    View Slide

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

    View Slide