Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
美しいショートコーディングの世界
hiroki.saito
December 24, 2016
Programming
0
170
美しいショートコーディングの世界
社内LTやとあるイベントのLTで使用したショートコーディングの紹介スライド
hiroki.saito
December 24, 2016
Tweet
Share
More Decks by hiroki.saito
See All by hiroki.saito
GCPとPHP PHP Conference Japan 2020
gamu1012
1
1.8k
たった1人のAPI開発 BEAR.Sundayで解決した課題たち / PHPerKaigi2019_TrackB_1445
gamu1012
1
2.8k
RedisとGoで実装するリアルタイム通知 / Real-time notification developed by Redis and Go
gamu1012
0
180
5分プログラミングSlackBotとmonolog
gamu1012
0
110
Bear.SundayとRMパターン
gamu1012
0
220
技術力ってなんだろう
gamu1012
0
40
新卒3年目エンジニアの生存戦略
gamu1012
1
300
Other Decks in Programming
See All in Programming
PHP でガチの電卓を作る
memory1994
PRO
2
170
子育てとEMと転職と
_atsushisakai
1
430
Amebaブログの会員画面システム刷新の道程
ryotasugawara
1
260
42tokyo-born2beroot-review
love42
0
130
tidy_rpart
bk_18
0
620
CPU/GPU高速化セミナー 浮動小数点から文字列への高速変換の論文を読んでみた / cpugpu acceleration seminar 20230201
fixstars
0
110
Remix + Cloudflare Pages + D1 で ポケモン SV のレンタルチームを検索できるアプリを作ってみた
kuroppe1819
4
1.4k
Excelの助けを借りて楽にシナリオを作ろう
rpa_niiyama
0
340
花き業界のサプライチェーンを繋げるプロダクト開発の進め方
userlike1
0
190
Zynq MP SoC で楽しむエッジコンピューティング ~RTLプログラミングのススメ~
ryuz88
0
410
爆速の日経電子版開発の今
shinyaigeek
2
670
ITエンジニア特化型Q&Aサイトteratailを 言語、DB、クラウドなど フルリプレイスした話
leveragestech
0
460
Featured
See All Featured
Fireside Chat
paigeccino
16
1.9k
Bash Introduction
62gerente
601
210k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
500
130k
Git: the NoSQL Database
bkeepers
PRO
419
60k
Building Applications with DynamoDB
mza
85
5k
Clear Off the Table
cherdarchuk
79
290k
What’s in a name? Adding method to the madness
productmarketing
12
1.9k
Building Your Own Lightsaber
phodgson
96
4.9k
How to train your dragon (web standard)
notwaldorf
66
4.3k
Raft: Consensus for Rubyists
vanstee
130
5.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
8
3.2k
Rails Girls Zürich Keynote
gr2m
87
12k
Transcript
美しいコード?
自己紹介 - エキサイト株式会社 ニュースメディア技術sec - PHP - 学生時代の専門は計算理論 競技プログラミングを熱心にやっていました
None
None
None
None
美しいコード書いてますか
優れた設計のコード
優れた設計のコード 見た瞬間に理解できるコード
優れた設計のコード 見た瞬間に理解できるコード これらは美しい リーダーブルコードにそんな感じのこと書いてあった
優れた設計のコード 見た瞬間に理解できるコード これらは美しい 美しいのはこれらだけではない!
美しい ショートコーディングの世界
ショートコーディングとは プログラムのソースコードが どれだけ短く書けるかを探求すること 別名: コードゴルフ
ショートコーディングをやってみよう! 環境: Ubuntu 16.04.1 LTS PHP 7.0.8-0ubuntu0.16.04.2 (cli) php.iniの error_reporting(0);
short_open_tag => On
問題 Fizz Buzz 1から30までのFizz Buzzの結果を出力しなさい ただし、各発言を1行に出力すること 例: 1 2 Fizz
4 Buzz Fizz
補足:FizzBuzzとは 1以上の整数を順に、以下のルールに従って発言していくゲームである。 3で割り切れる時には「Fizz」 5で割り切れる時には「Buzz」 3と5の両方で割り切れる時には「FizzBuzz」 それ以外の時はその数字を発言する 参考 AOJ2441 FizzBuzz
<? // 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"; } }
<? // 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未満らしい… <?for(;$i++<30;){echo(($i%3?'':Fizz).($i%5?'':Buzz))?:$i,"\n";}
まとめ ショートコーディングとは プログラムのソースコードがどれだけ短く書けるかを探求すること プログラミングは”道具”? “プログラミングをする” “プログラミングを読む” がコンテンツになるといいなーと思っております