質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.21%

C#のコードを書く順番を知りたい

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 550

pj7577bm60v

score 12

前提・実現したいこと

いつも勉強させてもらってます。
あるサイトでコードは上から下に読み込むという記事をみました。
コードを書く順番はあっているのか教えていただけたらありがたいです。

発生している問題・エラーメッセージ

コードを上から読み込んでいった時に
初期化 → 線の形を決める → 線を書き出す
の順番ではないのか?と何気なく思いました。
プロの皆さんはどういう順番で書かれているのでしょうか? 

コードを簡略化させていただきました。
OnLoadメソッドでpictBox=bitmap等の処理
OnClickでusing{}の処理
DrawLineでg.Draw()などの処理
よろしくお願いします。

該当のソースコード

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        protected override void OnLoad(EventArgs e)
        {
            //ビットマップの初期化
        }

        protected override void OnClick(EventArgs e)
        {
            //線を書き出す
        }

        private static void DrawLine(Graphics g)
        {
            //線の形を決める
        }
    }
}

試したこと

順番を変えても動くことを確認しました。(線を書き出す⇔線の形を決める)
ですが、後々変更のありそうな線の形を決めるを下部にあることで
修正しやすい。という認識でよろしいのでしょうか?

補足情報(FW/ツールのバージョンなど)

現在C#,WForm,Xamarinを主に勉強しています。
C#のコードの順番をはっきりさせたいと思っています。
その他の言語はまた違います等のご意見もいただけたらありがたいですが
参考にさせていただけたらと思います。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Zuishin

    2020/05/06 21:34 編集

    コンストラクタと DrawLine 以外イベントハンドラなのでどこから書いても同じです。DrawLine は別クラスに分離するのが良いと思います。

    あと、イベントハンドラは protected である必要はありません。private にしましょう。

    キャンセル

  • pj7577bm60v

    2020/05/07 00:28

    DrawLineを別クラスにする場合別の.csファイルに別のクラスを分けるのはありなのでしょうか?
    プロジェクトごとなどあるかと思いますが、
    ファイル数が多くなる、フォームが長くなるはどちらを優先するべきなのでしょうか?

    キャンセル

  • pj7577bm60v

    2020/05/07 00:33

    ファイルの方はprivateに修正いたしました。
    ご指摘ありがとうございます。

    キャンセル

回答 3

+2

基本的には文法的に許されているのであればどんな順序で書いても構いません。人間がコードレビューする時などに、ある程度順序立てて書かれている方が読みやすいというのはあるかも、という程度です。

どうしても長いコードになる場合、関連する処理が近いところにある方がコード内で移動する距離も短いでしょうから、その辺は各々の好みにもよると思います。ただ、そんなに長いコードになるぐらいなら、もうちょっと粒度の細かいクラス分割ができないか、等、別に考える事があろうかとは思います。

もしプロジェクトのガイドラインで決められているのであれば、それに従いましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/07 00:10

    回答ありがとうございます。
    プロジェクトごと、もしくは会社ごとで書き方は決まっているのだろうと思っていたのですが、
    一般的な書き方もあるのではないかと思っていました。
    読みやすいコード目指して頑張りたいと思います。

    キャンセル

  • 2020/05/07 10:06 編集

    中・大規模なシステムになると数百にも及ぶファイルが作られることになるので、いちいち手作業で並べ替えるのが現実的でなかったり、それを維持するのが無駄なコストになる場合もあります。
    そういう場合はせいぜいフォーマットツールでアルファベット順に自動で並べ替えたりする(可視性ごとのソートもあるでしょうけど)ぐらいが現実的な落とし所だったりするので、そこを考えるよりは中身を考えた方が良いです。

    キャンセル

  • 2020/05/07 21:39

    ファイルが数百ですか。新しいフォームやクラスで新しいファイルを作っていくとなるほどと思います。
    コード作成頑張っていきたいと思います。
    ありがとうございました。

    キャンセル

checkベストアンサー

+1

ただの感想になってしまいますが、publicprotected overrideprivate staticと並べるのはそれはそれできれいな気はします。自然に入出力というか外部とのインターフェース的なものが上に来るようになり、見通しもそんなに悪くないでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/07 09:37 編集

    こちらの回答も間違いではないですし、実際に私もそのようにしろと指導された事もあります。またそういう基準で作られたガイドラインも存在します。
    ただ、これは昔、紙にソースコードを印刷してレビューしていた頃の文化を引きずっている場合が多く、IDEを使うのであれば各種コードナビゲーション機能を使えば済む話なので、そこにはそれほど拘らないという考えの人も多いと思います。
    IDEが使えないor読む人が使うことを想定していない場合には今でも有効な指針だとは思いますが。

    キャンセル

  • 2020/05/07 16:50

    @質問者さん
    最終的にベストアンサーを選ぶのは質問者さんなので、もちろん悩んで頂いてもいいのですが、システム上ベストアンサーを選ばないといつまでも未解決のままになるので、どちらかを選ぶか、または他の回答を待つか(その場合は「まだ回答を求めています」みたいな機能が使えます)明確にして頂ければと思います。

    キャンセル

  • 2020/05/07 17:01

    ベストアンサーのクリックをしたつもりでいました。
    大変失礼いたしました。

    キャンセル

+1

古い時代、確かにコードは上から下に読まれることを前提とした制限があったことはあります。
つまり、「利用されるものは、すべからくそれより前(つまりコード上で上で)に、定義されていなければならない」という制限です。
※func(A) が使われる前に、public func(A) なりなんなりの定義が存在している

ですがこれはマルチパスコンパイルや仮定義(C のヘッダ定義もそう)などの技法により不要となって久しい制限です。現在においては出現順序を考慮する必要性はほとんどありません。
ゆえに出現順序を云々というのは、コードの見やすさであるとか分類のしやすさといった点から考えることとなります。
しかも最近では IDE が賢くなって、勝手にアウトライン化(定義を自動抽出してリストアップする)して整理してくれますから、コード上の位置を気にすることも、コードを印刷してみるなどの場合を除けば不要となりました。

なので、プロジェクトなどでガイドラインがあるならそれに従えばよいし、ないならば自分なりに良さそうと思った順にしてしまうしかないでしょう。

ちなみに私は

  • プロパティへのアクセサはプロパティ名のget→set の順で並べる(Aのget → Aのset → Bのget → Bのset)
  • イベントハンドラは同種(ボタンのクリックなど)はなるべく固める
  • public を先に置く。ただしあるpublicなメソッドの中から呼び出される限定された(密接に繋がった)privateメソッドは、publicメソッドの前後に置く
  • 全体の流れの中で、先に動くものを上に書く。ただしクラス定義の場合、デストラクタはコンストラクタの次に固定する

など、ある意味ごちゃごちゃです。

※例えば private で書いてたメソッドが public にする必要が出たからといって、コード上で位置を大移動するかと言えばしない

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/07 21:31

    回答ありがとうございます。
    コードが上から下に読むのは絶対というのは昔の話だったのですね。

    コードの順番も参考にさせていただき試してみたいと思います。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる