rabbit-slide-kou-schoo-readable-code-2015-04 2015.4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rabbit +1 -0
- data/README.rd +32 -0
- data/Rakefile +17 -0
- data/chapter-7.rab +560 -0
- data/config.yaml +23 -0
- data/images/github-kou-with-annotation.svg +88 -0
- data/images/github-kou.png +0 -0
- data/pdf/schoo-readable-code-2015-04-chapter-7.pdf +0 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 375f4283c021659fa0aa9cb050066b834f92e408
|
4
|
+
data.tar.gz: 5578a7088b61491271240141fd4d615131389516
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c20f9ac2013920950e0211b64d1b1c461cbb2c8ca1285442fb3b359953a618c3fa834e595b63f2a3faf455912f07e892eb1c3f576b130ec0e9b66fb31d1a3b3b
|
7
|
+
data.tar.gz: 0755f1997a03ab369158ddf0bb7b04b940bae5891a19f9c915b9490cbc1a7d3455233dc87411090b2787572d12a5b97d79af7d06d84ebed6ff1e9984f735fed6
|
data/.rabbit
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
chapter-7.rab
|
data/README.rd
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
= 名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
|
2
|
+
|
3
|
+
2015年4月3日(金)21:00-22:00に実施する授業の資料です。今回は「7章 制御フローを読みやすくする」を読みながら、よりよい制御フローの書き方について学びます。
|
4
|
+
|
5
|
+
== ライセンス
|
6
|
+
|
7
|
+
CC BY-SA 4.0
|
8
|
+
|
9
|
+
原著作者名は以下の通りです。
|
10
|
+
|
11
|
+
* 須藤功平(またはKouhei Sutou)
|
12
|
+
|
13
|
+
== 作者向け
|
14
|
+
|
15
|
+
=== 表示
|
16
|
+
|
17
|
+
rake
|
18
|
+
|
19
|
+
=== 公開
|
20
|
+
|
21
|
+
rake publish
|
22
|
+
|
23
|
+
== 閲覧者向け
|
24
|
+
|
25
|
+
=== インストール
|
26
|
+
|
27
|
+
gem install rabbit-slide-kou-schoo-readable-code-2015-04
|
28
|
+
|
29
|
+
=== 表示
|
30
|
+
|
31
|
+
rabbit rabbit-slide-kou-schoo-readable-code-2015-04.gem
|
32
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require "rabbit/task/slide"
|
2
|
+
|
3
|
+
# Edit ./config.yaml to customize meta data
|
4
|
+
|
5
|
+
spec = nil
|
6
|
+
Rabbit::Task::Slide.new do |task|
|
7
|
+
spec = task.spec
|
8
|
+
# spec.files += Dir.glob("doc/**/*.*")
|
9
|
+
# spec.files -= Dir.glob("private/**/*.*")
|
10
|
+
task.spec.add_runtime_dependency("rabbit-theme-clear-code")
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "Tag #{spec.version}"
|
14
|
+
task :tag do
|
15
|
+
sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
|
16
|
+
sh("git", "push", "--tags")
|
17
|
+
end
|
data/chapter-7.rab
ADDED
@@ -0,0 +1,560 @@
|
|
1
|
+
= リーダブルコードを\n読み解こう
|
2
|
+
|
3
|
+
: subtitle
|
4
|
+
7章 制御フローを読みやすくする
|
5
|
+
: author
|
6
|
+
須藤功平
|
7
|
+
: institution
|
8
|
+
株式会社クリアコード
|
9
|
+
: content-source
|
10
|
+
schoo
|
11
|
+
: date
|
12
|
+
2015-04-03
|
13
|
+
: allotted-time
|
14
|
+
40m
|
15
|
+
: theme
|
16
|
+
clear-code
|
17
|
+
|
18
|
+
= 質問(1)
|
19
|
+
|
20
|
+
(('tag:center'))
|
21
|
+
前回の授業は…
|
22
|
+
|
23
|
+
* A:参加した
|
24
|
+
* B:参加できなかった\n
|
25
|
+
(('note:(都合が合わなかった、知らなかったなど)'))
|
26
|
+
* C:知っていたが参加していない
|
27
|
+
|
28
|
+
= 質問(2)
|
29
|
+
|
30
|
+
(('tag:center'))
|
31
|
+
プログラミングについて
|
32
|
+
|
33
|
+
* A:未経験
|
34
|
+
* B:学習中(('note:(schooや学校、独学など)'))
|
35
|
+
* C:趣味・仕事でたまに書く\n
|
36
|
+
(('note:(趣味でWebサイトを作っている、職業がデザイナーなど)'))
|
37
|
+
* D:趣味・仕事でバリバリ書く\n
|
38
|
+
(('note:(趣味でOSSを開発している、職業がエンジニアなど)'))
|
39
|
+
|
40
|
+
= 質問(3)
|
41
|
+
|
42
|
+
(('tag:center'))
|
43
|
+
リーダブルコード(本)を…
|
44
|
+
|
45
|
+
* A:読んだ
|
46
|
+
* B:読んでいる
|
47
|
+
* C:まだ読んでいない
|
48
|
+
= 内容
|
49
|
+
|
50
|
+
* 自己紹介
|
51
|
+
* リーダブルコードとは
|
52
|
+
* 実例で考えよう
|
53
|
+
* 実際の改善にチャレンジ!
|
54
|
+
* まとめ
|
55
|
+
* 質疑応答
|
56
|
+
|
57
|
+
= 自己紹介(1)
|
58
|
+
|
59
|
+
* リーダブルコードの\n
|
60
|
+
「解説」の著者\n
|
61
|
+
(('note:http://www.clear-code.com/blog/2012/6/11.html'))
|
62
|
+
|
63
|
+
= 自己紹介(2)
|
64
|
+
|
65
|
+
* クリアコードの代表取締役
|
66
|
+
* 「クリア」な(意図が明確な)\n
|
67
|
+
「コード」を大事にする\n
|
68
|
+
ソフトウェア開発会社
|
69
|
+
|
70
|
+
= 自己紹介(3)
|
71
|
+
|
72
|
+
# image
|
73
|
+
# src = images/github-kou-with-annotation.svg
|
74
|
+
# relative_height = 100
|
75
|
+
|
76
|
+
== スライドプロパティー
|
77
|
+
|
78
|
+
: enable-title-on-image
|
79
|
+
false
|
80
|
+
|
81
|
+
= リーダブルコードとは(1)
|
82
|
+
|
83
|
+
# blockquote
|
84
|
+
# title = はじめに p. x
|
85
|
+
|
86
|
+
本書の目的は、君のコードをよくすることだ
|
87
|
+
|
88
|
+
= リーダブルコードとは(2)
|
89
|
+
|
90
|
+
# blockquote
|
91
|
+
# title = はじめに p. x
|
92
|
+
|
93
|
+
その中心となるのは、コードは理解しやすくなければいけないという考えだ
|
94
|
+
|
95
|
+
= リーダブルコードとは(3)
|
96
|
+
|
97
|
+
# blockquote
|
98
|
+
# title = 1.2 読みやすさの基本定理 p. 3
|
99
|
+
|
100
|
+
「コードを理解する」というのは、変更を加えたりバグを見つけたりできるという意味
|
101
|
+
|
102
|
+
= リーダブルコード
|
103
|
+
|
104
|
+
読む人が…
|
105
|
+
|
106
|
+
* 変更できるコード
|
107
|
+
* バグを見つけられるコード
|
108
|
+
|
109
|
+
(('tag:center'))(('tag:x-large'))
|
110
|
+
↓\n
|
111
|
+
読む人視点!
|
112
|
+
|
113
|
+
= 何をしているコード?
|
114
|
+
|
115
|
+
# coderay cpp
|
116
|
+
|
117
|
+
Node* node = list->head;
|
118
|
+
if (node == NULL) return;
|
119
|
+
|
120
|
+
while (node->next != NULL) {
|
121
|
+
Print(node->data);
|
122
|
+
node = node->next;
|
123
|
+
}
|
124
|
+
if (node != NULL) Print(node->data);
|
125
|
+
|
126
|
+
(('tag:center'))(('note:「優れた」コードって何? p. 2より'))
|
127
|
+
|
128
|
+
= 何をしているコード?
|
129
|
+
|
130
|
+
# coderay cpp
|
131
|
+
|
132
|
+
for (Node* node = list->head;
|
133
|
+
node != NULL;
|
134
|
+
node = node->next)
|
135
|
+
Print(node->data);
|
136
|
+
|
137
|
+
(('tag:center'))(('note:「優れた」コードって何? p. 2より'))
|
138
|
+
|
139
|
+
= どちらがリーダブル?
|
140
|
+
|
141
|
+
# coderay cpp
|
142
|
+
|
143
|
+
// どちらがリーダブルコード?どうして?
|
144
|
+
// リーダブルコード:変更できる・バグを見つけられるコード
|
145
|
+
// A.
|
146
|
+
Node* node = list->head;
|
147
|
+
if (node == NULL) return;
|
148
|
+
while (node->next != NULL) {
|
149
|
+
Print(node->data);
|
150
|
+
node = node->next;
|
151
|
+
}
|
152
|
+
if (node != NULL) Print(node->data);
|
153
|
+
// B.
|
154
|
+
for (Node* node = list->head; node != NULL; node = node->next)
|
155
|
+
Print(node->data);
|
156
|
+
|
157
|
+
(('tag:center'))(('note:「優れた」コードって何? p. 2より'))
|
158
|
+
|
159
|
+
= 実例で考えよう
|
160
|
+
|
161
|
+
(('tag:center'))
|
162
|
+
7章\n
|
163
|
+
「制御フローを読みやすくする」\n
|
164
|
+
より
|
165
|
+
|
166
|
+
((' '))
|
167
|
+
|
168
|
+
= 7.1 例:式の並び順(1)
|
169
|
+
|
170
|
+
# coderay c
|
171
|
+
|
172
|
+
/* A */
|
173
|
+
if (length >= 10)
|
174
|
+
/* B */
|
175
|
+
if (10 <= length)
|
176
|
+
|
177
|
+
(('tag:center'))
|
178
|
+
どちらがリーダブル?
|
179
|
+
|
180
|
+
= 7.1 例:式の並び順(2)
|
181
|
+
|
182
|
+
# coderay c
|
183
|
+
|
184
|
+
/* A */
|
185
|
+
while (bytes_received < bytes_expected)
|
186
|
+
/* B */
|
187
|
+
while (bytes_expected > bytes_received)
|
188
|
+
|
189
|
+
(('tag:center'))
|
190
|
+
どちらがリーダブル?
|
191
|
+
|
192
|
+
= 7.1 式の並び順の指針
|
193
|
+
|
194
|
+
* 左側
|
195
|
+
* 「調査対象」の式。変化する。
|
196
|
+
* (({length})), (({bytes_received}))
|
197
|
+
* 右側
|
198
|
+
* 「比較対象」の式。変化しにくい。
|
199
|
+
* (({10})), (({bytes_expected}))
|
200
|
+
|
201
|
+
= 7.1 指針に沿った並び順
|
202
|
+
|
203
|
+
# coderay c
|
204
|
+
|
205
|
+
/* ↓調査対象。変化する。 */
|
206
|
+
if (length >= 10)
|
207
|
+
/* ↑比較対象。変化しない。 */
|
208
|
+
/* ↓調査対象 */
|
209
|
+
while (bytes_received < bytes_expected)
|
210
|
+
/* ↑比較対象 */
|
211
|
+
|
212
|
+
= 7.1 指針の理由
|
213
|
+
|
214
|
+
(('tag:center'))
|
215
|
+
自然言語の並び順に近い
|
216
|
+
|
217
|
+
# coderay c
|
218
|
+
|
219
|
+
/* もし長さが10以上なら */
|
220
|
+
if (length >= 10)
|
221
|
+
|
222
|
+
/* もし10が長さ以下なら */
|
223
|
+
if (10 <= length)
|
224
|
+
|
225
|
+
= 番外:別の指針
|
226
|
+
|
227
|
+
* 左側
|
228
|
+
* 小さい値
|
229
|
+
* 右側
|
230
|
+
* 大きい値
|
231
|
+
|
232
|
+
左から右にいくほど\n
|
233
|
+
大きくなることは自然\n
|
234
|
+
(('note:(例:数直線)'))
|
235
|
+
|
236
|
+
= 番外:指針に沿った並び順
|
237
|
+
|
238
|
+
使う比較演算子は「(({<}))」と「(({<=}))」
|
239
|
+
|
240
|
+
# coderay c
|
241
|
+
|
242
|
+
if (10 <= length)
|
243
|
+
|
244
|
+
while (bytes_received < bytes_expected)
|
245
|
+
|
246
|
+
= 7.1:まとめ
|
247
|
+
|
248
|
+
* 条件式内の並び順を工夫すると\n
|
249
|
+
リーダブル度があがる
|
250
|
+
* 指針:
|
251
|
+
* 左側:変化する式
|
252
|
+
* 右側:変化しにくい式
|
253
|
+
|
254
|
+
= 7.2 例:処理の順番
|
255
|
+
|
256
|
+
# coderay c
|
257
|
+
|
258
|
+
if (a == b) { | if (a != b) {
|
259
|
+
/* ケース1 */ | /* ケース2 */
|
260
|
+
} else { | } else {
|
261
|
+
/* ケース2 */ | /* ケース1 */
|
262
|
+
} | }
|
263
|
+
|
264
|
+
(('tag:center'))
|
265
|
+
どちらがリーダブル?
|
266
|
+
|
267
|
+
= 7.2 指針
|
268
|
+
|
269
|
+
* 否定形は肯定形にして書く
|
270
|
+
* if (!debug)よりif (debug)
|
271
|
+
* 単純な処理の条件を先に書く
|
272
|
+
* ifとelseを一望できて読みやすい
|
273
|
+
* 関心を引く条件を先に書く
|
274
|
+
* 目立つ条件を先に書く
|
275
|
+
|
276
|
+
= 7.2 指針:注意
|
277
|
+
|
278
|
+
* 同時に満たせないことがある
|
279
|
+
* 自分で優劣を判断すること
|
280
|
+
* 優劣は明確になることが多い
|
281
|
+
|
282
|
+
= 7.2 判断してみよう
|
283
|
+
|
284
|
+
# coderay cpp
|
285
|
+
|
286
|
+
if (!url.HasQueryParameter("expand_all")) {
|
287
|
+
response.Render(items);
|
288
|
+
// ...
|
289
|
+
} else {
|
290
|
+
for (int i = 0; i < items.size(); i++) {
|
291
|
+
items[i].Expand();
|
292
|
+
}
|
293
|
+
// ...
|
294
|
+
}
|
295
|
+
|
296
|
+
= 7.2 !を外して順番を逆に
|
297
|
+
|
298
|
+
# coderay cpp
|
299
|
+
|
300
|
+
// 関心が引く条件「expand_all」を優先
|
301
|
+
// (肯定形になったのはおまけ)
|
302
|
+
if (url.HasQueryParameter("expand_all")) {
|
303
|
+
for (int i = 0; i < items.size(); i++) {
|
304
|
+
items[i].Expand();
|
305
|
+
}
|
306
|
+
// ...
|
307
|
+
} else {
|
308
|
+
response.Render(items);
|
309
|
+
// ...
|
310
|
+
}
|
311
|
+
|
312
|
+
= 7.2 まとめ
|
313
|
+
|
314
|
+
* 処理する条件の順番次第で\n
|
315
|
+
リーダブル度があがる
|
316
|
+
* 指針:
|
317
|
+
* 否定形は肯定形にして書く
|
318
|
+
* 単純な条件を先に書く
|
319
|
+
* 関心がある・目立つ条件を先に書く
|
320
|
+
|
321
|
+
= 7.5 関数から早く返す
|
322
|
+
|
323
|
+
(('tag:center'))
|
324
|
+
「ガード節」
|
325
|
+
|
326
|
+
# coderay java
|
327
|
+
|
328
|
+
public boolean Contains(String str, String substr) {
|
329
|
+
if (str == null || substr == null) return false;
|
330
|
+
if (substr.equals("")) return true;
|
331
|
+
// ...
|
332
|
+
}
|
333
|
+
|
334
|
+
= 7.5 ガード節の効果
|
335
|
+
|
336
|
+
* 以降の処理が単純になる
|
337
|
+
* 異常値・特別値を考慮しなくてよい
|
338
|
+
* →考える事が減る
|
339
|
+
* ネストが浅くなる
|
340
|
+
* →コードの見通しがよくなる
|
341
|
+
|
342
|
+
(('tag:center'))
|
343
|
+
リーダブルコードにつながる!
|
344
|
+
|
345
|
+
= 番外:ifとreturnの使い方
|
346
|
+
|
347
|
+
(('tag:center'))
|
348
|
+
ifとreturnの使い方\n
|
349
|
+
ククログ(2012-03-28)\n
|
350
|
+
(('note:http://www.clear-code.com/blog/2012/3/28.html'))
|
351
|
+
|
352
|
+
((' '))
|
353
|
+
|
354
|
+
= 番外:パス
|
355
|
+
|
356
|
+
(('tag:center'))
|
357
|
+
同じ処理でも流れ(パス)は違う
|
358
|
+
|
359
|
+
# coderay ruby
|
360
|
+
|
361
|
+
if 条件 | return if 条件
|
362
|
+
サブ処理 |
|
363
|
+
end | サブ処理
|
364
|
+
|
365
|
+
= 番外:パスとリーダブル
|
366
|
+
|
367
|
+
* 処理を実行するときの流れ
|
368
|
+
* コードを読むときの流れ
|
369
|
+
* 読みやすい流れにすれば\n
|
370
|
+
リーダブルになる!
|
371
|
+
|
372
|
+
= 番外:例(1)
|
373
|
+
|
374
|
+
# coderay ruby
|
375
|
+
|
376
|
+
def add_comment(post, user, text)
|
377
|
+
if post.hidden_from?(user)
|
378
|
+
report_access_error
|
379
|
+
else
|
380
|
+
comment = Comment.create(text)
|
381
|
+
post.add(comment)
|
382
|
+
end
|
383
|
+
end
|
384
|
+
|
385
|
+
= 番外:例(1)コメント付き
|
386
|
+
|
387
|
+
# coderay ruby
|
388
|
+
|
389
|
+
# コメントを追加するメソッドだな!
|
390
|
+
def add_comment(post, user, text)
|
391
|
+
if post.hidden_from?(user)
|
392
|
+
# コメント追加しないの!?
|
393
|
+
report_access_error
|
394
|
+
else
|
395
|
+
# ネストされているけど正常系の処理か
|
396
|
+
# ifの方と同列の処理かと思った
|
397
|
+
comment = Comment.create(text)
|
398
|
+
post.add(comment)
|
399
|
+
end
|
400
|
+
end
|
401
|
+
|
402
|
+
= 番外:例(1)return付き
|
403
|
+
|
404
|
+
# coderay ruby
|
405
|
+
|
406
|
+
# コメントを追加するメソッドだな!
|
407
|
+
def add_comment(post, user, text)
|
408
|
+
if post.hidden_from?(user)
|
409
|
+
# ネストされているし特別な処理なんだな
|
410
|
+
report_access_error
|
411
|
+
return
|
412
|
+
end
|
413
|
+
|
414
|
+
# 通常はコメントが追加されるんだな!
|
415
|
+
comment = Comment.create(text)
|
416
|
+
post.add(comment)
|
417
|
+
end
|
418
|
+
|
419
|
+
= 番外:例(1)まとめ
|
420
|
+
|
421
|
+
* 正常系と異常系の扱いを変える
|
422
|
+
* 正常系の方が重要なコード
|
423
|
+
* 正常系はネストしない
|
424
|
+
* 重要なコードは見やすい場所に
|
425
|
+
|
426
|
+
= 番外:例(2)
|
427
|
+
|
428
|
+
# coderay ruby
|
429
|
+
|
430
|
+
def prepare_database(path)
|
431
|
+
if not File.exist?(path)
|
432
|
+
return Database.create(path)
|
433
|
+
end
|
434
|
+
|
435
|
+
Database.open(path)
|
436
|
+
end
|
437
|
+
|
438
|
+
= 番外:例(2)コメント付き
|
439
|
+
|
440
|
+
# coderay ruby
|
441
|
+
|
442
|
+
# データベースを準備するんだな
|
443
|
+
def prepare_database(path)
|
444
|
+
if not File.exist?(path)
|
445
|
+
# なかったら作るのか
|
446
|
+
return Database.create(path)
|
447
|
+
end
|
448
|
+
|
449
|
+
# あったら開くのか
|
450
|
+
# あれ、どっちも正常系じゃない?
|
451
|
+
Database.open(path)
|
452
|
+
end
|
453
|
+
|
454
|
+
= 番外:例(2)returnなし
|
455
|
+
|
456
|
+
# coderay ruby
|
457
|
+
|
458
|
+
# データベースを準備するんだな
|
459
|
+
def prepare_database(path)
|
460
|
+
if File.exist?(path)
|
461
|
+
# あったら開いて
|
462
|
+
Database.open(path)
|
463
|
+
else
|
464
|
+
# なかったら作るのか
|
465
|
+
Database.create(path)
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
469
|
+
= 番外:例(2)まとめ
|
470
|
+
|
471
|
+
* 正常系同士の扱いを変えない
|
472
|
+
* 変えると異常系と勘違いしてしまう
|
473
|
+
* なんでもガード節にしない
|
474
|
+
* 特別なケースや異常系のときだけ
|
475
|
+
|
476
|
+
= 他の例
|
477
|
+
|
478
|
+
* 三項演算子
|
479
|
+
* ネストを浅くする
|
480
|
+
* …
|
481
|
+
* (詳細は本を買ってください)
|
482
|
+
|
483
|
+
= 実際の改善にチャレンジ!
|
484
|
+
|
485
|
+
TODO
|
486
|
+
|
487
|
+
* 誤解されない名前に改善して投稿
|
488
|
+
* よい投稿に「いいね!」して応援
|
489
|
+
|
490
|
+
= まとめ(1)
|
491
|
+
|
492
|
+
* リーダブルコードとは
|
493
|
+
* 変更できるコード
|
494
|
+
* バグを見つけられるコード
|
495
|
+
* ↑は((*読む人視点*))
|
496
|
+
|
497
|
+
= まとめ(2)
|
498
|
+
|
499
|
+
* 「読みやすい制御フロー」を\n
|
500
|
+
考えた
|
501
|
+
* 条件式内の並び順
|
502
|
+
* →左に変化するもの・右に変化しにくいもの
|
503
|
+
* 条件による処理の順番
|
504
|
+
* →肯定形で書く・単純な条件を先に書くなど
|
505
|
+
* ガード節
|
506
|
+
* →特別なケースはすぐにreturn
|
507
|
+
|
508
|
+
= まとめ(3)
|
509
|
+
|
510
|
+
* 実際の改善にチャレンジした
|
511
|
+
* 「((*読む人*))が理解しやすいか?」を\n
|
512
|
+
とことん考えたはず
|
513
|
+
|
514
|
+
# blockquote
|
515
|
+
# title = 7章 制御フローを読みやすくする p. 89
|
516
|
+
|
517
|
+
鍵となる考え\n
|
518
|
+
行数を短くするよりも、他の人が理解するのにかかる時間を短くする。
|
519
|
+
|
520
|
+
= これから(1)
|
521
|
+
|
522
|
+
* これからも((*読む人*))のことを\n
|
523
|
+
考えてコードを書こう
|
524
|
+
* ((*読む人*))のことを考えるには?
|
525
|
+
* 読む経験をたくさん積む
|
526
|
+
* たくさんコードを読もう
|
527
|
+
|
528
|
+
= これから(2)
|
529
|
+
|
530
|
+
* たくさんコードを読むコツ
|
531
|
+
* コードから学ぶ気持ちで読む
|
532
|
+
* ×悪いこと探し
|
533
|
+
* ○いいこと探し
|
534
|
+
* 本来、コードを読むことは\n
|
535
|
+
楽しいことのはず!
|
536
|
+
|
537
|
+
= 悪いコード
|
538
|
+
|
539
|
+
* 見つけやすい
|
540
|
+
* 異質
|
541
|
+
* リーダブルじゃない
|
542
|
+
|
543
|
+
= よいコード
|
544
|
+
|
545
|
+
* 見つけにくい
|
546
|
+
* リーダブルだから
|
547
|
+
* すーっと理解できてひっかからない
|
548
|
+
* これからのチャレンジ
|
549
|
+
* 意識して見つけよう!
|
550
|
+
|
551
|
+
= これから(3)
|
552
|
+
|
553
|
+
(('tag:center'))(('tag:large'))
|
554
|
+
「解説」を読む\n
|
555
|
+
(('note:http://www.clear-code.com/blog/2012/6/11.html'))
|
556
|
+
|
557
|
+
* 本文:((*個人*))で\n
|
558
|
+
リーダブルコードを書く方法
|
559
|
+
* 解説:((*チーム*))で\n
|
560
|
+
リーダブルコードを書く方法
|
data/config.yaml
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
---
|
2
|
+
id: schoo-readable-code-2015-04
|
3
|
+
base_name: chapter-7
|
4
|
+
tags:
|
5
|
+
- rabbit
|
6
|
+
- readable-code
|
7
|
+
- schoo
|
8
|
+
presentation_date: 2015-04-03
|
9
|
+
version: 2015.4.3.0
|
10
|
+
licenses:
|
11
|
+
- CC BY-SA 4.0
|
12
|
+
slideshare_id:
|
13
|
+
speaker_deck_id:
|
14
|
+
ustream_id:
|
15
|
+
vimeo_id:
|
16
|
+
youtube_id:
|
17
|
+
author:
|
18
|
+
markup_language: :rd
|
19
|
+
name: Kouhei Sutou
|
20
|
+
email: kou@clear-code.com
|
21
|
+
rubygems_user: kou
|
22
|
+
slideshare_user: kou
|
23
|
+
speaker_deck_user: kou
|
@@ -0,0 +1,88 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
+
|
4
|
+
<svg
|
5
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
6
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
7
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
8
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
10
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
11
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
12
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
13
|
+
width="1003"
|
14
|
+
height="688"
|
15
|
+
id="svg2"
|
16
|
+
version="1.1"
|
17
|
+
inkscape:version="0.48.5 r10040"
|
18
|
+
sodipodi:docname="github-kou-with-annotation.svg">
|
19
|
+
<defs
|
20
|
+
id="defs4" />
|
21
|
+
<sodipodi:namedview
|
22
|
+
id="base"
|
23
|
+
pagecolor="#ffffff"
|
24
|
+
bordercolor="#666666"
|
25
|
+
borderopacity="1.0"
|
26
|
+
inkscape:pageopacity="0.0"
|
27
|
+
inkscape:pageshadow="2"
|
28
|
+
inkscape:zoom="0.7"
|
29
|
+
inkscape:cx="501.58384"
|
30
|
+
inkscape:cy="366.06296"
|
31
|
+
inkscape:document-units="px"
|
32
|
+
inkscape:current-layer="layer1"
|
33
|
+
showgrid="false"
|
34
|
+
inkscape:window-width="956"
|
35
|
+
inkscape:window-height="757"
|
36
|
+
inkscape:window-x="2444"
|
37
|
+
inkscape:window-y="168"
|
38
|
+
inkscape:window-maximized="0"
|
39
|
+
fit-margin-top="0"
|
40
|
+
fit-margin-left="0"
|
41
|
+
fit-margin-right="0"
|
42
|
+
fit-margin-bottom="0" />
|
43
|
+
<metadata
|
44
|
+
id="metadata7">
|
45
|
+
<rdf:RDF>
|
46
|
+
<cc:Work
|
47
|
+
rdf:about="">
|
48
|
+
<dc:format>image/svg+xml</dc:format>
|
49
|
+
<dc:type
|
50
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
51
|
+
<dc:title />
|
52
|
+
</cc:Work>
|
53
|
+
</rdf:RDF>
|
54
|
+
</metadata>
|
55
|
+
<g
|
56
|
+
inkscape:label="レイヤー 1"
|
57
|
+
inkscape:groupmode="layer"
|
58
|
+
id="layer1"
|
59
|
+
transform="translate(-280.92859,-231.57646)">
|
60
|
+
<image
|
61
|
+
y="231.57646"
|
62
|
+
x="280.92859"
|
63
|
+
id="image4540"
|
64
|
+
xlink:href="github-kou.png"
|
65
|
+
height="688"
|
66
|
+
width="1003" />
|
67
|
+
<rect
|
68
|
+
style="fill:#ffffff;fill-opacity:0.49803922;stroke:#a40000;stroke-width:3;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
69
|
+
id="rect4065"
|
70
|
+
width="727.14282"
|
71
|
+
height="107.14287"
|
72
|
+
x="545"
|
73
|
+
y="551.71924"
|
74
|
+
rx="5"
|
75
|
+
ry="5" />
|
76
|
+
<text
|
77
|
+
xml:space="preserve"
|
78
|
+
style="font-size:60px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
|
79
|
+
x="576.42853"
|
80
|
+
y="624.57635"
|
81
|
+
id="text4059"
|
82
|
+
sodipodi:linespacing="125%"><tspan
|
83
|
+
sodipodi:role="line"
|
84
|
+
id="tspan4063"
|
85
|
+
x="576.42853"
|
86
|
+
y="624.57635">毎日コードを書いている</tspan></text>
|
87
|
+
</g>
|
88
|
+
</svg>
|
Binary file
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rabbit-slide-kou-schoo-readable-code-2015-04
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2015.4.3.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kouhei Sutou
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-03-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rabbit
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.0.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.0.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rabbit-theme-clear-code
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: 2015年4月3日(金)21:00-22:00に実施する授業の資料です。今回は「7章 制御フローを読みやすくする」を読みながら、よりよい制御フローの書き方について学びます。
|
42
|
+
email:
|
43
|
+
- kou@clear-code.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- ".rabbit"
|
49
|
+
- README.rd
|
50
|
+
- Rakefile
|
51
|
+
- chapter-7.rab
|
52
|
+
- config.yaml
|
53
|
+
- images/github-kou-with-annotation.svg
|
54
|
+
- images/github-kou.png
|
55
|
+
- pdf/schoo-readable-code-2015-04-chapter-7.pdf
|
56
|
+
homepage: http://slide.rabbit-shocker.org/authors/kou/schoo-readable-code-2015-04/
|
57
|
+
licenses:
|
58
|
+
- CC BY-SA 4.0
|
59
|
+
metadata: {}
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 2.2.2
|
77
|
+
signing_key:
|
78
|
+
specification_version: 4
|
79
|
+
summary: "名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする"
|
80
|
+
test_files: []
|