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 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: []