rabbit-slide-kou-schoo-readable-code-2015-04 2015.4.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
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: []