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
250
美しいショートコーディングの世界
社内LTやとあるイベントのLTで使用したショートコーディングの紹介スライド
hiroki.saito
December 24, 2016
Tweet
Share
More Decks by hiroki.saito
See All by hiroki.saito
なぜフルサイクルエンジニアを目指すのか / FullCycleDeveloperNight#1
hirokisaito
0
8
新規事業と技術的課題 / ROSCAFE_TECH_NIGHT12_LT
hirokisaito
0
57
GCPとPHP PHP Conference Japan 2020
hirokisaito
1
2.4k
たった1人のAPI開発 BEAR.Sundayで解決した課題たち / PHPerKaigi2019_TrackB_1445
hirokisaito
1
3.7k
RedisとGoで実装するリアルタイム通知 / Real-time notification developed by Redis and Go
hirokisaito
0
290
5分プログラミングSlackBotとmonolog
hirokisaito
0
150
Bear.SundayとRMパターン
hirokisaito
0
270
技術力ってなんだろう
hirokisaito
0
94
新卒3年目エンジニアの生存戦略
hirokisaito
1
350
Other Decks in Programming
See All in Programming
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
0
170
ASP.NETアプリケーションのモダナイズ インフラ編
tomokusaba
1
390
「ElixirでIoT!!」のこれまでとこれから
takasehideki
0
370
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
110
Gleamという選択肢
comamoca
6
740
Passkeys for Java Developers
ynojima
3
880
XSLTで作るBrainfuck処理系
makki_d
0
210
Beyond Portability: Live Migration for Evolving WebAssembly Workloads
chikuwait
0
380
Spring gRPC で始める gRPC 入門 / Introduction to gRPC with Spring gRPC
mackey0225
2
520
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
280
生成AIで日々のエラー調査を進めたい
yuyaabo
0
620
Perplexity Slack Botを作ってAI活用を進めた話 / AI Engineering Summit プレイベント
n3xem
0
670
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
A Tale of Four Properties
chriscoyier
160
23k
How to train your dragon (web standard)
notwaldorf
92
6.1k
We Have a Design System, Now What?
morganepeng
52
7.6k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Faster Mobile Websites
deanohume
307
31k
A Modern Web Designer's Workflow
chriscoyier
693
190k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Code Review Best Practice
trishagee
68
18k
Adopting Sorbet at Scale
ufuk
77
9.4k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
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";}
まとめ ショートコーディングとは プログラムのソースコードがどれだけ短く書けるかを探求すること プログラミングは”道具”? “プログラミングをする” “プログラミングを読む” がコンテンツになるといいなーと思っております