Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
美しいショートコーディングの世界
Search
hiroki.saito
December 24, 2016
Programming
0
240
美しいショートコーディングの世界
社内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
hirokisaito
1
2.4k
たった1人のAPI開発 BEAR.Sundayで解決した課題たち / PHPerKaigi2019_TrackB_1445
hirokisaito
1
3.5k
RedisとGoで実装するリアルタイム通知 / Real-time notification developed by Redis and Go
hirokisaito
0
270
5分プログラミングSlackBotとmonolog
hirokisaito
0
140
Bear.SundayとRMパターン
hirokisaito
0
260
技術力ってなんだろう
hirokisaito
0
85
新卒3年目エンジニアの生存戦略
hirokisaito
1
340
Other Decks in Programming
See All in Programming
GraphQL あるいは React における自律的なデータ取得について
quramy
11
3k
XStateでReactに秩序を与えたい
gizm000
0
730
Debugging: All you need to know (for simultaneous interpreting)
jmatsu
2
800
Scala におけるコンパイラエラーとの付き合い方
chencmd
2
430
『ドメイン駆動設計をはじめよう』中核の業務領域
masuda220
PRO
5
1k
rbs-inlineを導入してYARDからRBSに移行する
euglena1215
1
290
Hono・Prisma・AWSでGeoなAPI開発
nokonoko1203
5
680
LangGraphでのHuman-in-the-Loopの実装
os1ma
3
1.1k
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
490
Google Sign-inの移行から始めるCredential Manager活用
clockvoid
0
310
エラーレスポンス設計から考える、0→1開発におけるGraphQLへの向き合い方
bicstone
5
1.5k
メモリ最適化を究める!iOSアプリ開発における5つの重要なポイント
yhirakawa333
0
420
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
334
56k
Clear Off the Table
cherdarchuk
91
320k
Building Your Own Lightsaber
phodgson
101
6k
Speed Design
sergeychernyshev
22
430
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
103
48k
Rails Girls Zürich Keynote
gr2m
93
13k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
89
16k
Thoughts on Productivity
jonyablonski
66
4.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
36
1.7k
Building a Modern Day E-commerce SEO Strategy
aleyda
36
6.8k
Become a Pro
speakerdeck
PRO
22
4.9k
Code Reviewing Like a Champion
maltzj
517
39k
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";}
まとめ ショートコーディングとは プログラムのソースコードがどれだけ短く書けるかを探求すること プログラミングは”道具”? “プログラミングをする” “プログラミングを読む” がコンテンツになるといいなーと思っております