本格的に自動出力されたコードを読み解いてみましょう。
ここではC#の基礎となる知識を学び、この先に進めるようになりましょう。
このページが説明するコードと自身のコードが異なる場合、最上位レベルのステートメントが有効な可能性があります。
まずは次の記事を参考に、最上位レベルのステートメントを利用しないプロジェクトを作ってください。
本来なら自動出力されたソースコードの解説に進みたいのですが、初心者に厄介な仕様があるので説明しておきます。具体的には、最上位レベルのステートメント(top-level statements)と呼ばれる仕様なのですが、これが逆に難易度を上げてる感があるんですよね。 最上位レベルのステートメント 簡単に言うと本来書くべき部分を省略できる記述です。 では、まずは自動出力されたProgram.csを見てみましょう。こんな感じになってますかね? // See https://ak...
自動出力されたコードの確認
最初に自動出力されたコードを確認しましょう。Program.csはこんな感じですよね?
namespace Sample
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
単なる念のため確認です。コードが同じなら先に進みましょう。
コードの記述方法
まずは内容を確認する前にコードの記述方法を学びましょう。
1行で1処理が原則
プログラムの原則は1行に1処理です。これをステートメントと呼びます。
ただし、この1行とは;(セミコロン)までを意味します。つまり途中で改行しても;が無ければプログラム的な行数は増えてません。
また、スペースやタブも同じ扱いで、どれだけ記述してもプログラムの処理には影響しません。
加えて入力できる文字は半角文字だけです。特殊な場合を除いて全角文字は入力できません。
なお、単語の途中など、明らかに中途半端な位置で改行やスペースを記述するのはNGです。
そういった記述をするとエラーでビルドが成功しません。つまり実行不可能になります。
コメント
プログラムにはコメントと呼ばれる補足説明を記述する方法があります。
これはプログラム的には一切の意味がなく、処理にも影響しないコードです。
では、何故そのような意味のないコードを書くのでしょうか?
それは説明のためです。プログラムは原則として英語のみで記述します。
さらには特定の記述しか認められないので、例え英語でもコードに対しての説明は書けません。
つまりは後で見返す時のメモです。もしくはチーム開発時のメンバーへの説明など、簡易ドキュメントみたいなものですね。
具体的な使い方はC#では2種類あって、次の方法でコメントを記述できます。
パターン1: //
こんな感じに//を付けた場所から、行の終わりまでがコメント扱いになります。
この時の行の終わりは;では無いので注意してください。あくまでテキスト的な行末です。
namespace Sample
{
internal class Program
{
static void Main(string[] args)
{
//Console.WriteLine("Hello, World!");
Console.WriteLine("Hello, World!"); // 文字列を出力する
}
}
}
行の途中からコメントにすることもできます。
パターン2: /**/
次は/*と*/で囲った部分がコメントになる方法です。
こんな感じに複数行をまとめてコメントできます。
namespace Sample
{
internal class Program
{
static void Main(string[] args)
{
/*Console.WriteLine("Hello, World!");
Console.WriteLine("Hello, World!");
Console.WriteLine("Hello, World!");*/
}
}
}
ここで僕から一言。この方法は使わなくていいです。理由は単に効率が悪いから。後ろに移動して*/をつけるのが手間です。
それだと複数行のコメントが大変では?
早速IDEの強さを知ってもらいますか。
コメントの切り替え方法
Visual Studioを使ってる場合は次の方法でコメントの切り替えができます。
どちらの場合もCtrlを押したまま次のキーを押してください。
コメント有効化
1. コメントに変更したい範囲を選択する。
2. Ctrl + Kを押した後にCtrl + Cを押す。
コメント無効化
1. コメントを解除したい範囲を選択する。
2. Ctrl + Kを押した後にCtrl + Uを押す。
ちなみに範囲を選択しない場合はカーソル行が対象になります。そう言えば、ある時からCtrl + /でも切り替えできた気がします。
凄い!
これがIDEを利用する利点だよ。こんなものは機能の1つに過ぎないけどね。
ちなみにコメント有効化をコメントアウトと呼ぶので覚えましょう。
IntelliSense(インテリセンス)
これはプログラムの記述ではないのですが、IDEの話をしたので続けて話します。
そもそもコードを入力する度に入力付近に何か出てきませんか?
それはVisual StudioのIntelliSenseと呼ばれる機能です。
簡単に機能説明すると「お前が入力したいのこれじゃね?」って感じにIDEが予測して出してくれます。
えっ、なにそれ凄すぎ...
IntelliSenseは年々進化してて、遂にはAI支援とか呼ばれる機能で、この場面なら普通これじゃね? みたいな予測変換機能が付いたんだ。
これらの機能を使えるのがIDE、いやVisual Studioで開発するメリットだよ。
あまりに恐ろしい機能。何かデメリットがあるのでは?
よくプログラマがプログラムを書けなくなるって言う。自動入力に頼りまくった結果、それを使えない環境では力を発揮できない的なやつだね。これに関してはVisual StudioみたいなIDEを利用することが現代の基本だから気にしなくていいよ。後はPCに高スペックを要求するってことかな。よく分かんないけどVisual Studioって重いらしいよ。僕ミジンコみたいPC使ってないから気持ち分かんないけど。
どうして言わなくていいことを...
ブロック
{}で囲まれた部分をブロックと呼びます。このブロックは必ず対になってる必要があり、{と}の数が異なることは許されません。
ブロックはステートメントと合わせて色々な部分で登場するので、ここでは簡単な説明のみにしますが、大抵は構文の始まりと終わりを意味します。
また、ブロックの内部にさらに{}を記述することができ、これをネスト構造と言います。
特に制限はなくいくらでもネストさせることができますが、その場合でも{と}の数は同じだけ必要です。
IDEが勝手に後ろ側を補完してくれるよ。
スコープ
先程の{}で囲まれた内側の範囲をスコープと言います。こちらも今は簡単な説明のみにします。
スコープとは内側で定義された項目(変数や関数など)の範囲を示します。
具体例で説明すると、あるスコープで定義した変数はその下位スコープでしか使用できません。
この下位とは自身が存在するブロックの内側より内部を意味します。こんな感じです。
namespace Sample
{
internal class Program
{
static void Main(string[] args)
{
{
// ここで変数Aを定義する
{
// ここは内側なのでAが利用可能
}
}
// ここは外側なのでAが利用不可能
}
}
}
スコープについては変数のところでしっかり触れます。
C#の型を学んだので、その知識を活かして変数の使い方を学びましょう。なお、ここで学ぶのはC#で変数を利用する方法です。変数?って人は先に次の記事を読んでください。 変数宣言と利用方法 難しくないので、例を見たほうが早いでしょう。 namespace Sample { internal class Program { static void Main(string[] args) { // 変数宣言 int age; ...
インデント
ブロックで囲まれた部分に段差があるのが分かりますでしょうか? これはインデントと言って、コードを見やすくしてます。
極端な話、インデントが無くてもプログラムは動きます。が、例として以下を見てください。
namespace Sample {
internal class Program {
static void Main(string[] args)
{ Console.WriteLine("Hello, World!"); } } }
これ許せますか?
無理...
このように雑なインデントでもプログラムの動作上は問題が無いのです。
それでも常識から逸脱したコードは読みづらく、誰にも受け入れてもらえません。
みなさんはそんなゴミを生み出さないプログラマを目指してください。
インデントがスペース派vsタブ派とか、どこで改行する派閥とか色々います。
これは別記事を書こうと思ってるのですが、今は気にしなくていいです。
常識の範囲で逸脱したコードじゃなければいいってこと?
その通り。答えのないことを永遠に考えても無駄。それに今はインデントを気にするより、たくさんコーディングしましょう。
ちなみにVisual Studioの機能でCtrl + K, Ctrl + Dって押すと、ある程度は自動でインデントが整います。
IDEで標準設定されてるインデントが答えなのでは?
それ以上は駄目!
Main関数
色々と前知識も付いたのでプログラムの解説に進みましょう。
まずはMain関数です。static void Main(string[] args)と記述されてる部分ですね。
これはMain関数と呼ばれ、どんなプログラムにも必ず1つ存在します。
仮に仕組み上はMain関数が見つからなくても、隠されてるだけで絶対に存在してます。
そして全てのプログラムはMain関数の頭から開始され、下方向に順次処理を進めていきます。
つまりプログラムを追うときはMain関数を探しましょう。ここから順番に辿っていけば必ず理解できます。
順次処理? と思った人はこちらをどうぞ。
プログラムの基本構造とは何でしょうか? これは特定のプログラミング言語に限らず、どの言語にも応用できる話です。内容は非常にシンプルで難しくありません。今後の助けになるので、ぜひ理解してください。 3つの基本構造 先に名前を出すと順次、選択、反復です。この3つの構造を使えば、どんなプログラムでも作れると言われてます。では、この3つは何を意味するのでしょうか。順番に解説していきます。 順次 (sequence) 最もシンプルな構造で、処理が上から下に進むことを...
class
クラスと呼ばれます。internal class Programと記述されてる部分ですね。
正直、現時点では気にしなくていいです。と言うより、今の知識だと説明する方法がないです。
ここではC#のクラスについて学びます。クラスはC#において最も大切な機能だと思ってます。それもあって最低限の内容を書いたつもりが、何かめっちゃ長くなりました。疲れたら数回に分けて読んでください。 クラス(class) クラスとは特定の機能を1つにまとめたものです。正直、説明が難しいのでコードを使って話します。最初に以下の記述方法とサンプルコードを見てください。これは車という機能をクラス化したコードです。 // クラス public class Car { ...
C#は仕様上、関数単体で存在することが許されず、必ずいずれかのクラスに属します。
今回の場合はMain関数がProgramクラスに所属する記述になってます。
namespace
名前空間と呼ばれます。同じことの繰り返しですが、これも気にしなくていいです。
ただし、非常に大切な仕組みなので別枠で解説をします。その時に学んでください。
ここではC#の名前空間について学びます。 名前空間 (namespace) 名前空間とは、複数のクラス等を1つの領域にまとめる機能です。この仕組みを使うことで、ある程度の機能を1つのスコープにまとめることができます。 名前空間を定義する方法 まとめたい領域をnamespaceと{}で囲みます。実は最初から何度も登場してますが、改めて確認しましょう。 では、以下が構文とサンプルコードです。 // 名前空間のOSを定義 namespace...
自動出力されたコードの処理
さて、自動出力されたコードは非常にシンプルです。
実処理は1行しか記述されてなく、単なる標準出力ですね。
Console.WriteLine("Hello, World!");
前回も説明してますが、これは標準出力、つまりは実行時の黒画面に文字列を出力する関数です。
当面の間は深くは気にせず、文字列を出力したい時に使うんだなぁくらいの理解で大丈夫です。
ちなみに別のプログラミング言語でもHello, World!を出力するのが最初のサンプルコードです。
理由は知らないんですが、何か慣習としてそうなってます。
ビルドエラー
何かが記述的に間違ってる場合はビルドがエラーになり、この状態を解決するまでは実行できません。
試しに次のコードをビルドしてください。
namespace Sample
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!")
}
}
}
これは単なる;(セミコロン)の記述忘れです。
エラーが出ると、画面上のエラーを表示する部分に、それっぽい内容が表示されます。
無理やり日本語訳したエラーもあり意味不明かもしれませんが、常に内容を確認するよう心掛けてください。
厳しめに言うと、このエラーは自分で調べて解決するのが基本です。早々に誰かに聞いたり、質問サイトに投げるやつはこの業界が向いてません。その時に必ず聞かれますよ。何をどこまで調べたのかを。それすら言えない人は迷惑なので引退しましょう。
調べても分からなかったらどうしたらいいの?
その時は普通に聞きましょう。調べることすらできないモンキーが悪なだけです。
調べた内容をしっかり相手に伝えれば、理解するつもりがあると分かるので、寧ろ好印象だよ。
厳しいけど言ってることは分かる。
あとがき
当分はMain関数の中身を変更する方法で学習をします。載せてるコードをコピペしてもいいけど、自分で入力したほうが覚えますよ。
◆ C#に関する学習コンテンツ
この記事は参考になりましたか?
コメント