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
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
230
A full stack side project webapp all in Kotlin (KotlinConf 2025)
dankim
0
120
10 Costly Database Performance Mistakes (And How To Fix Them)
andyatkinson
0
440
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
790
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
2
19k
0626 Findy Product Manager LT Night_高田スライド_speaker deck用
mana_takada
0
180
Porting a visionOS App to Android XR
akkeylab
0
590
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
530
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
490
AI Agent 時代のソフトウェア開発を支える AWS Cloud Development Kit (CDK)
konokenj
3
280
型で語るカタ
irof
0
200
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
2
14k
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Navigating Team Friction
lara
187
15k
Designing for Performance
lara
610
69k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
830
We Have a Design System, Now What?
morganepeng
53
7.7k
A Modern Web Designer's Workflow
chriscoyier
695
190k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
510
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
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ライフを!