Skip to main content
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
EN
Upload
Download free for 30 days
Sign in
Uploaded by
Junya Shimazu
PDF, PPTX
8,922 views
覚えておきたいプログラミング作法
新米プログラマーにぜひ読んで欲しい 「プログラミング作法」のまとめ
Technology
◦
Read more
9
Save
Share
Embed
Save to Drive
Download now
Download as PDF, PPTX
1
/ 27
2
/ 27
3
/ 27
4
/ 27
5
/ 27
6
/ 27
7
/ 27
8
/ 27
9
/ 27
10
/ 27
11
/ 27
Most read
12
/ 27
13
/ 27
Most read
14
/ 27
Most read
15
/ 27
16
/ 27
17
/ 27
18
/ 27
19
/ 27
20
/ 27
More Related Content
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
32 slides
141K views
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
by
Fixstars Corporation
114 slides
10.9K views
PDF
普通の人でもわかる Paxos
by
tyonekura
64 slides
12.5K views
PDF
C++でCプリプロセッサを作ったり速くしたりしたお話
by
Kinuko Yasuda
28 slides
36.6K views
PPTX
レガシーコード改善のススメ
by
Akira Hirasawa
39 slides
30.6K views
PPTX
イベント駆動プログラミングとI/O多重化
by
Gosuke Miyashita
78 slides
16K views
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
by
Mikiya Okuno
59 slides
22.5K views
PDF
ロボット好き集まれ!こいつ、動くぞ。星と翼のパラドクス開発事例
by
エピック・ゲームズ・ジャパン Epic Games Japan
84 slides
12.2K views
マイクロにしすぎた結果がこれだよ!
by
mosa siru
32 slides
141K views
ARM CPUにおけるSIMDを用いた高速計算入門
by
Fixstars Corporation
114 slides
10.9K views
普通の人でもわかる Paxos
by
tyonekura
64 slides
12.5K views
C++でCプリプロセッサを作ったり速くしたりしたお話
by
Kinuko Yasuda
28 slides
36.6K views
レガシーコード改善のススメ
by
Akira Hirasawa
39 slides
30.6K views
イベント駆動プログラミングとI/O多重化
by
Gosuke Miyashita
78 slides
16K views
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
by
Mikiya Okuno
59 slides
22.5K views
ロボット好き集まれ!こいつ、動くぞ。星と翼のパラドクス開発事例
by
エピック・ゲームズ・ジャパン Epic Games Japan
84 slides
12.2K views
What's hot
PDF
オンラインゲームの仕組みと工夫
by
Yuta Imai
56 slides
889.1K views
PDF
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
by
T. Suwa
84 slides
4K views
PPTX
Spanner移行について本気出して考えてみた
by
techgamecollege
59 slides
1.9K views
PDF
WebSocketのキホン
by
You_Kinjoh
63 slides
24.8K views
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
by
Takuto Wada
40 slides
17.6K views
PPTX
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
by
Yugo Shimizu
95 slides
17.1K views
PDF
PlaySQLAlchemy: SQLAlchemy入門
by
泰 増田
91 slides
25.2K views
PDF
PHPからgoへの移行で分かったこと
by
gree_tech
39 slides
7.3K views
PDF
いまさら聞けないarmを使ったNEONの基礎と活用事例
by
Fixstars Corporation
102 slides
8.1K views
PPT
インフラエンジニアのためのcassandra入門
by
Akihiro Kuwano
85 slides
72.1K views
PDF
シリコンバレーの「何が」凄いのか
by
Atsushi Nakada
77 slides
189.8K views
ODP
Guide To AGPL
by
Mikiya Okuno
29 slides
102.2K views
PDF
Kubernetesによる機械学習基盤への挑戦
by
Preferred Networks
18 slides
15.8K views
PDF
Paxos
by
Preferred Networks
64 slides
38.4K views
PPTX
規模の見積もり WACATE 2016 winter
by
Tomoaki Fukura
77 slides
4.6K views
PPTX
組織のアーキテクチャ(逆コンウェイ法則を用いて組織アーキテクチャを考える).pptx
by
ssuser0e110a
12 slides
561 views
PPTX
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
by
Tokoroten Nakayama
70 slides
212.2K views
PPTX
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
by
Koichiro Matsuoka
20 slides
2.3K views
PPTX
まだ脆弱性対応で手間取ってるの?Nessusを使ってみよう
by
Suguru Ito
54 slides
2.7K views
PPTX
GTMF 2016:Perforce HelixによるGit環境の改善と拡張 株式会社東陽テクニカ(Perforce Helix)
by
Game Tools & Middleware Forum
29 slides
7.2K views
オンラインゲームの仕組みと工夫
by
Yuta Imai
56 slides
889.1K views
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
by
T. Suwa
84 slides
4K views
Spanner移行について本気出して考えてみた
by
techgamecollege
59 slides
1.9K views
WebSocketのキホン
by
You_Kinjoh
63 slides
24.8K views
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
by
Takuto Wada
40 slides
17.6K views
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
by
Yugo Shimizu
95 slides
17.1K views
PlaySQLAlchemy: SQLAlchemy入門
by
泰 増田
91 slides
25.2K views
PHPからgoへの移行で分かったこと
by
gree_tech
39 slides
7.3K views
いまさら聞けないarmを使ったNEONの基礎と活用事例
by
Fixstars Corporation
102 slides
8.1K views
インフラエンジニアのためのcassandra入門
by
Akihiro Kuwano
85 slides
72.1K views
シリコンバレーの「何が」凄いのか
by
Atsushi Nakada
77 slides
189.8K views
Guide To AGPL
by
Mikiya Okuno
29 slides
102.2K views
Kubernetesによる機械学習基盤への挑戦
by
Preferred Networks
18 slides
15.8K views
Paxos
by
Preferred Networks
64 slides
38.4K views
規模の見積もり WACATE 2016 winter
by
Tomoaki Fukura
77 slides
4.6K views
組織のアーキテクチャ(逆コンウェイ法則を用いて組織アーキテクチャを考える).pptx
by
ssuser0e110a
12 slides
561 views
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
by
Tokoroten Nakayama
70 slides
212.2K views
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
by
Koichiro Matsuoka
20 slides
2.3K views
まだ脆弱性対応で手間取ってるの?Nessusを使ってみよう
by
Suguru Ito
54 slides
2.7K views
GTMF 2016:Perforce HelixによるGit環境の改善と拡張 株式会社東陽テクニカ(Perforce Helix)
by
Game Tools & Middleware Forum
29 slides
7.2K views
覚えておきたいプログラミング作法
1.
覚えておきたい プログラミング作法 2014.09.27 第24回 アルゴリズム勉強会 in
cafe?IKAGAWA DO
2.
よろしくお願いします • 島津 純哉(しまず じゅんや) • 北海道札幌市出身 金沢大学’11 •
DMM.com Labo Webエンジニア (ECサイト, ゲームアプリ) • Linux, Apache, PHP, MySQL, Memcached, Javascript, HTML5, Vim, ShellScript, Git @jshimazu0820 Junya Shimazu
3.
参考文献 • 2000年初版 • 10年以上人気のある名著 •
今日話すのは第1章の内容
4.
いきなりですが問題です
5.
以下のコードの悪いところを探してみよう if ( (country
== SING) || (country == BRNI) (country == POL) || (country == ITALY)) { /* * 国がシンガポールかブルネイかポーランドだったら * 現在の時間はオフフック時ではなく応答時 * 応答時をリセットし曜日をセット */ }
6.
悪いところ • イタリアがコメントにない… • それぞれの国はいったいどんな関連が… •
国が増えるたび条件式はどんどん長くなる… → たった数行のコードに、これだけの問題
7.
ソースコードは 「プログラマーのための読み物」 として残る「資産」です
8.
資産をきれいに残していくための 「作法」をいくつか紹介していきます
9.
※作法の紹介の前に • 素養のあるプログラマーにとっては 「当たり前」の内容です • そういった方は新米プログラマーの教育など に役立てていただけると幸いです
10.
名前の作法
11.
名前の付け方大事 • 定数、変数、関数、クラス・・etc • 単なるラベルではない •
読み手に情報を伝え続けるもの
12.
グローバル変数には説明的な名前を // 悪い例 int a
= 1; int b = 2; ! // 良い例 int beforeNumber = 1; int afterNumber = 2; • 説明的 = 変数名から値が想像できるような名前
13.
ローカル変数には短い名前を // 悪い例 for (theElementIndex
= 0; theElementIndex <= nelems; theElementIndex++) { ! elem[theElementIndex] = theElementIndex; ! } ! // 良い例 for (i = 0; i <= nelems; i++) { ! elem[i] = i; ! } • スコープの浅いものは説明的でなくてもよい
14.
関数には能動的な名前を int function getPendingCount()
{ return 1; } ! ! bool function isActiveCall() { return true; } • 動詞 + 名詞 が基本 • 真偽値を返すものはis + 名詞
15.
式と文の作法
16.
自然な形の式を使おう // 悪い例 if (
!(block_id < actblocks) || !(block_id >= unblocks) ) ! ! ! // 良い例 if ( (block_id >= actblocks) && (block_id < unblocks) ) • 論理演算子は少なければ少ない程読みやすくなる!
17.
かっこをつけてあいまいさ回避 // 悪い例 leap_year =
y % 4 == 0 && y % 100 != 0 || y % 400 == 0; ! ! // 良い例 leap_year = ((y%4 == 0) && (y % 100 != 0)) || (y % 400 == 0);
18.
マジックナンバー
19.
マジックナンバーには名前をつけよう // 悪い例 // 0.3って何を意味しているの・・? int
getTotalPoint(int price) { return 0.3 * price; } ! // 良い例 # define BONUS_RATE = 0.3; int getTotalPoint(int price) { return BONUS_RATE * price; } • 定数、変数、メソッドに置き換えるなど
20.
一貫性と慣用句
21.
一貫性を大事にしよう • 全体で統一する • ルールの内容自体は重要ではない •
字下げ、命名規則 (camelCase, snake_case, PascalCase)
22.
慣用句を使おう # ふつうのループ for (i
= 0; i <= n; i++) ! # 無限ループ for (;;) ! while (1) • プログラムの慣用句で一貫性を
23.
コメントの作法
24.
コメントに関する作法 • 当たり前のことは書かない • 関数とグローバルデータにコメントを •
悪いコードにコメントをつけない、書き直す • コードと矛盾させない
25.
まとめ • 悪いコードは読みづらいだけではなく、 問題を抱えていることが多い • 大事なのはいいコードを書こうという習慣 •
思いやりの精神
26.
こちらもおすすめ • 「プログラミング作法」 第1章をコンパクトにまと めたような内容 • 説明がやわらかめでさらに 読みやすい
27.
ご清聴ありがとうございました