佐々木屋

技術的なことから趣味まで色々書きます

5.演習・課題

オブジェクト指向の導入

課題 手続き型でよく見る配列に情報を持つ場合(カンマ区切りなども含めて)があります。一番の問題は何番目に何のデータを保持しているのかが分かりにくいということです。これは非常に危険なデータの持ち方でもあります。 string[] person = new string[2]…

無意味なスコープ

変数スコープは出来るだけ短くするとバグの発生を抑えることができます。 課題① 変数iはメソッドの最初の方に宣言されていますが、実際はfor文でしか使用されていません。 int i; //処理① for (i = 0; i <= 10; ++i) { //処理② } Dim i As Integer '処理① Fo…

ガード節によるネスト防止

ステートメントをネストし過ぎると可読性が著しく低下します。逆に言えばネストが少なければ見やすくなるのです。 課題 以下のような数値をチェックするような関数を考えます。 private int test1(int x, int y, int z) { int res = 0; if (x < 0) { res = 1…

三項演算子の有効活用

課題 例えば以下のような処理を考えます。 bool syoriFlg = true; string naiyo = ""; if (syoriFlg ) { naiyo = "hoge"; } else { naiyo = "piyo"; } Dim syoriFlg As Boolean = True Dim naiyo As String = "" If syoriFlg Then naiyo = "hoge" Else naiyo…

不要な制御フラグ

制御フラグでの条件分岐はよくある手法の一つですが、これが多くなりすぎると非常に可読性が悪くなります。 課題① 例えば以下のコードを見てみましょう。 int x = 1; int y = 2; bool flg = true; while (flg) { if (x * y > 10) flg = false; ++x; ++y; } D…

マジックナンバーはシンボリック定数に置き換える

課題 以下のコードのどこが問題でしょうか。 string[] colorNames = {"桃", "黒", "黄", "青", "赤" }; for (int i = 2; i <= colorNames.Length - 1; i++) { Console.WriteLine(colorNames[i]); } Dim colorNames As String() = {"桃", "黒", "黄", "青", "…

リファクタリングの判断

私がコードをチェックする時、「これは駄目なコードだ」とリファクタリングの対象とする点がいくつかあります。 今回はそれをまとめて紹介しますので、共感できる部分は是非修正してみて下さい。逆に共感できない部分は、何故それが駄目なのかを考えるのも面…

オブジェクト指向型理解度チェック

VB6、VBAからC#、VB.NETへ流れてきた方専用のチェックリストを作ってみました。自分がオブジェクト指向型を理解しているかどうかを17個のチェックで確認することができます。①オブジェクトって何? ②クラスって何? ③インスタンスって何? ④クラスとインス…

手続き型とオブジェクト指向型の関係

VB6やVBAは手続き型と呼ばれていますが、別にオブジェクト指向で書けない訳ではないです。ただ「向いていない」のです。関係性としては、サッカーのフィールダーとキーパーみたいな感じですね。同じサッカー選手でボールを扱うのは一緒ですが、キーパーがド…