Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
C# ドキドキ ライブ!!
~ 小島の分 ~
牛タン会議 2019 @ 仙台
2019/12/14
小島 富治雄
#GyutanKaigi2019
自己紹介
今回は、FastEnum のコード レビュー
自分の役割は何か?
~役割に合った戦略を~
役割を考える
役割を考える
コードレビューに
おけるチートとは?
ちなみに 前回は C#で七並べ対決! @de:code
C#で七並べ対決! (のはずが)
JavaScript で
DOM 操作して
自分が勝っているかのように
画面を書き替えました。
それは
すごいけど
C#対決
とは?
JavaScript でチート!
このJavaScript のコードは、
C#の中のただの文字列リテラル。
なので、このプログラムは C#。
ちょっと何言ってるかわからない。
「カロリーは熱に弱いから、
揚げ物はカロリーゼロ」
よりも謎理論。
今回は、FastEnum のコード レビュー
今回の、コードレビューの予測
コードレビューという言葉の
定義を見直した。
アゼルバイジャンの北部の方言では、
「コー・ドレビュー」の意味は、
「早く終わって牛タン食べたい」。
などと
言い出す
のかも
今回の 私のアイディア 1:
Amazon CodeGuru | Amazon Web Services
もうこれで
いいじゃん
Amazon CodeGuru | Amazon Web Services
試しに FastEnum を Amazon CodeGuru に
Amazon CodeGuru | Amazon Web Services
あれ?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using FastEnumUt...
LINQ?
#if InternalsLinq
using System;
using System.Collections;
using System.Collections.Generic;
namespace FastEnumUtility.Inte...
#if InternalsLinq
using FastEnumUtility.Internals.Linq;
#else // InternalsLinq
using System.Linq;
#endif // InternalsLinq
...
Internals.Linq による初期化の高速化
0.00
100.00
200.00
300.00
400.00
500.00
600.00
700.00
1 2 3 4 5 6 7
#15 InitializeBenchmark
系列1 ...
都会の絵の具
アイディア 3: この機会に、初心に立ち返ってもらう
あのころの新人研修 「コードを書くときの心得」
(大きなお世話だが)
初心を思い出そう
新人研修 「コードを書くときの心得」
Q. 綺麗なコードって
どういうの?
A. 変更や追加が楽で、
テストが楽なコード。
新人研修 「コードを書くときの心得」
A. 動くのは最低限のことで当たり前。
追加や変更を繰り返しても「動き続ける」ことが大切。
コードの綺麗さは、ソフトウェアの寿命に貢献。
Q. コードが綺麗でなくても、
動けばいいんじゃないの?
新人研修 「コードを書くときの心得」
Q. コードって手順を
書くんですよね?
A. まあそうだけど、コードは、意図を語るべし。
プログラムには、なるべく HOW (どうやってやるか) でなく
WHAT (何をやるか) を書く。
ちなみに WH...
新人研修 「コードを書くときの心得」
Q. メソッド名は、そこで何やってるかを
付ければ良いんですよね。
A. 呼ぶ側の視点で命名 (インターフェイスは外から見る)。
×: LoadXmlAndCreateItemList()
// メソッドの...
新人研修 「コードを書くときの心得」
Q. 省略せずに適切なメソッド名を付けろって
いうけど、そうすると名前が長くなっちゃう。
A. 各メソッドを単機能にしてかつ汎用的にすると、
短く適切な名前に。
×: GetOldStaffSalaryAv...
新人研修 「コードを書くときの心得」
A. メソッドは:
⚫ ひとかたまりの処理を分離して、独立させる。
⚫ それに名前を付けて、抽象化する。
⚫ 名前を付けることで、認識できるようにする
(ジョシュア ツリーの悟り → Name and Co...
最後におまけ: var について
A. var を使うと分かりにくくなるような
コードを書かない。
Q. 型推論の var を使うとコードが分かりにくくなるって
聞いたんですが、var を使うコツってありますか?
Upcoming SlideShare
Loading in …5
×

牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分

牛タン会議 2019
https://vsuc.connpass.com/event/156131/

2019/12/15
「C#ドキドキ ライブ!!」
小島の分

  • Be the first to comment

  • Be the first to like this

牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分

  1. 1. C# ドキドキ ライブ!! ~ 小島の分 ~ 牛タン会議 2019 @ 仙台 2019/12/14 小島 富治雄 #GyutanKaigi2019
  2. 2. 自己紹介
  3. 3. 今回は、FastEnum のコード レビュー
  4. 4. 自分の役割は何か? ~役割に合った戦略を~ 役割を考える
  5. 5. 役割を考える コードレビューに おけるチートとは?
  6. 6. ちなみに 前回は C#で七並べ対決! @de:code
  7. 7. C#で七並べ対決! (のはずが) JavaScript で DOM 操作して 自分が勝っているかのように 画面を書き替えました。 それは すごいけど C#対決 とは?
  8. 8. JavaScript でチート! このJavaScript のコードは、 C#の中のただの文字列リテラル。 なので、このプログラムは C#。 ちょっと何言ってるかわからない。 「カロリーは熱に弱いから、 揚げ物はカロリーゼロ」 よりも謎理論。
  9. 9. 今回は、FastEnum のコード レビュー
  10. 10. 今回の、コードレビューの予測 コードレビューという言葉の 定義を見直した。 アゼルバイジャンの北部の方言では、 「コー・ドレビュー」の意味は、 「早く終わって牛タン食べたい」。 などと 言い出す のかも
  11. 11. 今回の 私のアイディア 1:
  12. 12. Amazon CodeGuru | Amazon Web Services もうこれで いいじゃん
  13. 13. Amazon CodeGuru | Amazon Web Services 試しに FastEnum を Amazon CodeGuru に
  14. 14. Amazon CodeGuru | Amazon Web Services あれ?
  15. 15. using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using FastEnumUtility.Internals; アイディア2: FastEnum に気になるコードを発見!
  16. 16. LINQ?
  17. 17. #if InternalsLinq using System; using System.Collections; using System.Collections.Generic; namespace FastEnumUtility.Internals.Linq { internal static class Enumerable { public static TSource[] ToArray<TSource>(this IEnumerable<TSource> source) { if (source is IReadOnlyCollection<TSource> readOnlyCollection && source is ICollection<TSource> collection) { var array = new TSource[readOnlyCollection.Count]; collection.CopyTo(array, 0); return array; } return System.Linq.Enumerable.ToArray(source); } Internals.Linq を作成して… public static IReadOnlyCollection<TResult> Select<T, TResult>( this IReadOnlyCollection<T> @this, Func<T, TResult> projection ) => new EnumerableWithCount<TResult>(System.Linq.Enumerable.Select(@this, projection), @this.Count); public static IReadOnlyCollection<TResult> Select<T, TResult>( this IReadOnlyCollection<T> @this, Func<T, int, TResult> projection ) => new EnumerableWithCount<TResult>(System.Linq.Enumerable.Select(@this, projection), @this.Count); // ...以下省略...
  18. 18. #if InternalsLinq using FastEnumUtility.Internals.Linq; #else // InternalsLinq using System.Linq; #endif // InternalsLinq FastEnum の using を差し替え。
  19. 19. Internals.Linq による初期化の高速化 0.00 100.00 200.00 300.00 400.00 500.00 600.00 700.00 1 2 3 4 5 6 7 #15 InitializeBenchmark 系列1 系列2
  20. 20. 都会の絵の具 アイディア 3: この機会に、初心に立ち返ってもらう
  21. 21. あのころの新人研修 「コードを書くときの心得」 (大きなお世話だが) 初心を思い出そう
  22. 22. 新人研修 「コードを書くときの心得」 Q. 綺麗なコードって どういうの? A. 変更や追加が楽で、 テストが楽なコード。
  23. 23. 新人研修 「コードを書くときの心得」 A. 動くのは最低限のことで当たり前。 追加や変更を繰り返しても「動き続ける」ことが大切。 コードの綺麗さは、ソフトウェアの寿命に貢献。 Q. コードが綺麗でなくても、 動けばいいんじゃないの?
  24. 24. 新人研修 「コードを書くときの心得」 Q. コードって手順を 書くんですよね? A. まあそうだけど、コードは、意図を語るべし。 プログラムには、なるべく HOW (どうやってやるか) でなく WHAT (何をやるか) を書く。 ちなみに WHY (何故このロジックを選んだかなど) はコメントで。
  25. 25. 新人研修 「コードを書くときの心得」 Q. メソッド名は、そこで何やってるかを 付ければ良いんですよね。 A. 呼ぶ側の視点で命名 (インターフェイスは外から見る)。 ×: LoadXmlAndCreateItemList() // メソッドの中で何をやるかが名前になっている ○: GetItemList() // サービスを受ける側の視点
  26. 26. 新人研修 「コードを書くときの心得」 Q. 省略せずに適切なメソッド名を付けろって いうけど、そうすると名前が長くなっちゃう。 A. 各メソッドを単機能にしてかつ汎用的にすると、 短く適切な名前に。 ×: GetOldStaffSalaryAverageAndPrint(); ○: Print(Staffs.Where(staff => staff.IsOld) .Select(staff => staff.Salary).Average());
  27. 27. 新人研修 「コードを書くときの心得」 A. メソッドは: ⚫ ひとかたまりの処理を分離して、独立させる。 ⚫ それに名前を付けて、抽象化する。 ⚫ 名前を付けることで、認識できるようにする (ジョシュア ツリーの悟り → Name and Conquer)。 ⚫ 汎用化することで、再利用できるようにする。 Q. メソッドって重複した処理を まとめるためにあるんですよね。
  28. 28. 最後におまけ: var について A. var を使うと分かりにくくなるような コードを書かない。 Q. 型推論の var を使うとコードが分かりにくくなるって 聞いたんですが、var を使うコツってありますか?

×