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
Perlのよい書き方
Search
dorapon2000
July 01, 2020
Programming
0
180
Perlのよい書き方
#perlwalateの発表で使用したスライドです。
perlstyleとPerl Best Practceの話
dorapon2000
July 01, 2020
Tweet
Share
More Decks by dorapon2000
See All by dorapon2000
Try::Tiny再入門
dorapon2000
0
340
ns-3.29でモジュール開発
dorapon2000
0
1.3k
Other Decks in Programming
See All in Programming
bootcamp2025_バックエンド研修_WebAPIサーバ作成.pdf
geniee_inc
0
120
Android16 Migration Stories ~Building a Pattern for Android OS upgrades~
reoandroider
0
130
Foundation Modelsを実装日本語学習アプリを作ってみた!
hypebeans
0
120
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
730
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
250
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
510
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
240
Go言語の特性を活かした公式MCP SDKの設計
hond0413
1
300
Catch Up: Go Style Guide Update
andpad
0
230
CSC509 Lecture 05
javiergs
PRO
0
300
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
440
オープンソースソフトウェアへの解像度🔬
utam0k
16
3.1k
Featured
See All Featured
Building an army of robots
kneath
306
46k
RailsConf 2023
tenderlove
30
1.3k
Unsuck your backbone
ammeep
671
58k
Six Lessons from altMBA
skipperchong
29
4k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
KATA
mclloyd
PRO
32
15k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Facilitating Awesome Meetings
lara
56
6.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Transcript
Perlのよい書き方 Perl若手の会 (2020/07/01) dorapon2000
% whoami 久保田享祐 / dorapon2000 - 筑波大学大学院 → モバイルファクトリー - 新卒3ヶ月目 -
Perlは入社が決まってから触り始めた - Python - 最近の趣味 - Apex - 競プロ - みんはや - プライムビデオ
とつぜんですが、 未完了、あるいは結果が許容値を下回る場合、次のクライアントへ なにかがおかしい? next CLIENT if not $finished || $result
< $MIN_ACCEPTABLE;
こう書くとどうでしょうか - not は || よりも演算子の優先度が低い - ! と not
は演算子の優先度が異なる - 思い違いから意図しない挙動に next CLIENT if not ($finished || $result < $MIN_ACCEPTABLE);
Perlベストプラクティス - ! は古くから使われるブール演算子で馴染みが深い - 書き手と読み手どちらにも思い違いが起きないように、and/not は いっさい使用しないようにする next CLIENT
if !$finished || $result < $MIN_ACCEPTABLE; Perlベストプラクティス p.76
紹介するもの - % perldoc perlstyle - https://perldoc.jp/docs/perl/5.26.1/perlstyle.pod - Perlの文化を知れる -
Perl Best Practice - https://www.amazon.co.jp/dp/4873113008/ - 業務中の悩みの答えになる
⚠注意 - あくまで指標 - チームや自分にあったものを選びましょう
perlstyle - Perlスタイルガイド • 4 カラムのインデント。 • 可能なら、開始中かっことキーワードを同一行に; そうでなければ、開始をそろえる。 •
複数行 BLOCK の開始中かっこの前にスペース。 • 1 行の BLOCK は中かっこも含め、1 行で。 • セミコロンの前に空白なし。 • "短い" 1 行 BLOCK ではセミコロンを省略。※ • ほとんどの演算子の前後にはスペース。 • "複雑な"代入(ブラケット内)の前後にはスペース。 • 異なることをするチャンクの間には空行。 • else をくっつけない。 • 関数名と開始カッコの間にはスペースなし。 • カンマの後ろにはスペース。 • 長い行は、演算子の後ろで改行する(and と or を除く)。※ • 行の最後のカッコの後ろにスペース。 • 対応する要素の開始位置をそろえる。 • 冗長な表現は、わかりにくくならない限りは省略する。
複数行 BLOCK の開始中かっこの前にスペース for my $name (@names) { ... }
for my $name (@names){ ... } PBPはK&Rスタイ ルを推奨 for ... { BSD }
else をくっつけない。 } else { ... ... } else {
... 未だに慣れない
長い行は、演算子の後ろで改行する push @steps, $steps[-1] + $radial_velocity * $elpased_time + $orbital_velocity
* ($phase + $phase_shift) - $DRAG_COEFF * $altitude push @steps, $steps[-1] + $radial_velocity * $elpased_time + $orbital_velocity * ($phase + $phase_shift) - $DRAG_COEFF * $altitude; PBP perlstyle PBP
対応する要素の開始位置をそろえる。 $name = standardize_name($name); $age = time - $birth_date; $status
= ‘active’; $name = standardize_name($name); $age = time - $birth_date; $status = ‘active’; とても見やすい
主要部を前に open(FOO,$foo) || die "Can't open $foo: $!"; die "Can't
open $foo: $!" unless open(FOO,$foo); 主要部が 前! or も可
ループのラベルは積極的に使う LINE: for (;;) { statements; last LINE if $foo;
next LINE if /^#/; statements; } - lastはアウトデント - ループのラベルは積極的に使う perlstyleとPBPの両方 で紹介されている
PBPで紹介されているもの - 長い代入式は代入演算子の前で分割する - サブルーチンを後続の開きカッコから分離しない $preficted_val = $average + predicted_change
* $fudge_factor; 2行目が前の続きとす ぐわかる my @candidates = get_candidates($marker); 制御構文は前後に空白を入れ るため、見た目で関数だとわか る
良いコードの手助けをするツール - Perl::Critic; - 構文チェック - Perl::Tidy; - 自動整形 -
-pbpオプションでPBPの形式にしてくれる 各種エディタの拡張機能と合わせることができる
まとめ - つねに一貫性を。 - 常に素敵に。
ご清聴ありがとうございました よいPerlライフを!