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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

3回答

8318閲覧

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

pj7577bm60v

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2020/05/06 12:03

前提・実現したいこと

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

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

コードを上から読み込んでいった時に 初期化 → 線の形を決める → 線を書き出す の順番ではないのか?と何気なく思いました。 プロの皆さんはどういう順番で書かれているのでしょうか?  コードを簡略化させていただきました。 OnLoadメソッドでpictBox=bitmap等の処理 OnClickでusing{}の処理 DrawLineでg.Draw()などの処理 よろしくお願いします。

該当のソースコード

C#

1using System; 2using System.Drawing; 3using System.Windows.Forms; 4 5namespace WindowsFormsApp1 6{ 7 public partial class Form1 : Form 8 { 9 public Form1() 10 { 11 InitializeComponent(); 12 } 13 14 protected override void OnLoad(EventArgs e) 15 { 16 //ビットマップの初期化 17 } 18 19 protected override void OnClick(EventArgs e) 20 { 21 //線を書き出す 22 } 23 24 private static void DrawLine(Graphics g) 25 { 26 //線の形を決める 27 } 28 } 29}

試したこと

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/05/06 12:37 編集

コンストラクタと DrawLine 以外イベントハンドラなのでどこから書いても同じです。DrawLine は別クラスに分離するのが良いと思います。 あと、イベントハンドラは protected である必要はありません。private にしましょう。
pj7577bm60v

2020/05/06 15:28

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

2020/05/06 15:33

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

回答3

0

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

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

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

投稿2020/05/06 12:22

gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pj7577bm60v

2020/05/06 15:10

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

2020/05/07 01:08 編集

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

2020/05/07 12:39

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

0

古い時代、確かにコードは上から下に読まれることを前提とした制限があったことはあります。
つまり、「利用されるものは、すべからくそれより前(つまりコード上で上で)に、定義されていなければならない」という制限です。
※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 08:17

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pj7577bm60v

2020/05/07 12:31

回答ありがとうございます。 コードが上から下に読むのは絶対というのは昔の話だったのですね。 コードの順番も参考にさせていただき試してみたいと思います。 ありがとうございました。
guest

0

ベストアンサー

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

投稿2020/05/06 12:29

hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pj7577bm60v

2020/05/06 15:05

回答ありがとうございます。 コードの書き方ひとつで考えるところはものすごくあるんだなと思いました。 ベストアンサーにさせていただきます。
hayataka2049

2020/05/06 15:23

個人的にBAとしてはgentaroさんを推します。
pj7577bm60v

2020/05/06 15:41

ベストアンサー悩みましたが 直感的になるほどと思ってしまいました。 みなさん初歩的な質問につきあっていただきましてありがとうございます。
gentaro

2020/05/07 00:40 編集

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

2020/05/07 07:50

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

2020/05/07 08:01

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問