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.4k
Other Decks in Programming
See All in Programming
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
130
GISエンジニアから見たLINKSデータ
nokonoko1203
0
190
CSC307 Lecture 03
javiergs
PRO
1
460
Python札幌 LT資料
t3tra
7
1.1k
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
180
SQL Server 2025 LT
odashinsuke
0
120
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
180
Deno Tunnel を使ってみた話
kamekyame
0
310
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
4k
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.4k
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
160
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
0
280
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
120
Building an army of robots
kneath
306
46k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
37
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Technical Leadership for Architectural Decision Making
baasie
0
200
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
360
A better future with KSS
kneath
240
18k
YesSQL, Process and Tooling at Scale
rocio
174
15k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
58
41k
A designer walks into a library…
pauljervisheath
210
24k
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ライフを!