2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

初学者が独習C#をざっくり読んでみる 第6回 -制御構文-

Posted at

ぜんかいまでの記録

大体わかってきたから標準ライブラリに早くいきたい.
breakやcontinueとかいろいろのこってるらしいけれど飛ばして読みかけてしまった

§4 制御構文(続

4.3 ループの制御

修了条件にかかわらずループを抜け出したい, 特定の周回だけをパスしたいときに使う構文

4.3.1 break命令

ループを強制的に中断させる. break;

4.3.2 continue命令

現在の周回だけスキップして次のループに行く continue:

どちらもifと一緒に使うのが一般的

break&continue
int i;
int sum = 0;

for(i=1; i<=100; i++)
{
    sum += i;
    if(sum > 1000)
    {
        break;
    }
}

Console.WriteLine(i);


int sum2 = 0;
for(int i=0; i<=100; i++)
{
    if(i%2 != 0)
    {
        continue;
    }
    sum2+=i;
}

Console.WriteLine(i);

4.3.3 ループのネストとbreak/continue

ネストした構文でbreakを使った場合内側のloopのみを抜けるよ.

40までの九九
for (var i=1; i<10; i++)
{
  for(var j=1; j<10; j++)
  {
    var result = i * j;
    if(result>40)
    {
      break;
    }
  Console.Write($"{result, 2}"); // resultを最低二桁で表示
  }
}

4.4 制御命令のその他の話題

gotoとプリプロセッサ

4.4.1 goto

あぁ...スパゲティのおとぉ...

ラベルとgotoを使うことで強制的にコードのhそりを他の場所に移動ができます

goto
//template

labelName:
goto labelName:

//ex.
goto THERE;
Console.WriteLine("Skipped Line");
THERE:
Console.WriteLine("DONE");

以下注意点

  • どこへでも移動できるわけではない. 他メソッドとかループ外から内部へ移動は不可
  • 可読性低い. 使うか使わないかは宗教論争

使うときは

  • ネストされた中のループから一気に外のループ含めて脱出するとき
  • switchで他ラベルに飛ぶとき

等が一応は考えられる.
要するに一つの構文の中で完結しようなってことだと思う

4.4.2 プリプロセッサ

コンパイラーに対する命令, ディレクティブを表すもの
ファイルの文頭に宣言をする
シンボルのスコープ(?)はファイル単位

例を以下に

ディレクティブ 概要
#define A シンボルAを定義
#undef A シンボルAを未定義に
#if A...#else...#endif シンボルAがある時, ifのコード, ない場合はelseのコードをコンパイル
#if A...#elif B...#elif C...#endif ifのelse ifバージョン. コンパイラするコードのより複雑な制御
#region...#endregion コードブロックを指定
#warning [message] 警告メッセージを表示
#error [message] エラーメッセージを表示
#line n "file" エラー/ 警告時の行番号(n)/ファイル名(file)を固定
#pragma warning [disable/restore] list listで示された警告を有効(restore)か無効(disbale)にする
条件コンパイル

#defineと#ifを利用することでデバッグ時だけ有効なコードを定義できる

define&if
#define DEBUG

#if DEBUG
  Console.WriteLine("asdf");
#endif

シンボルは特定の値を持つことはできない.

ifディレクティブの条件式

ifのなかでは, 論理演算子が利用可能

#if (DEBGUG && TESTED)といった記述が可能

折り畳み可能なブロック

#region [hogehoge]を使うことでhogehogeというメモを残したままVS上でコードを折りたためる(メソッドができるように)


ようやく標準ライブラリだ...Chapterもついに5まで来た. 頑張ろう

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?