0%

C# 筆記 - 運算式與陳述式基本認識

C# ASP.NET

運算式

  • 「運算式」是由「運算元」和「運算子」建構而成。運算式的運算子會指出要將哪些運算套用到運算元。
  • 運算子範例包括 +-*/new
  • 運算元範例包括常值欄位區域變數運算式

運算式示意圖

當運算式包含多個運算子時,運算子的「優先順序」會控制評估個別運算子的順序。 例如,運算式 x + y * z 會評估為x + (y * z),因為 * 運算子的優先順序高於 + 運算子。

白話文:先乘除,後加減。

更多運算子可參考下面兩篇

C# 運算子 (C# 參考)

Day08-C#運算式與運算子(+、-、*、/、>、<….等)-來用 C#算數學吧!(上)

陳述式

程式的動作是藉由陳述式來表達。 C# 支援數種不同類型的陳述式,其中一些是以內嵌陳述式來定義。

區塊宣告陳述式:

可允許在許可單一陳述式的內容中撰寫多個陳述式。 區塊是由在 {} 分隔符號之間撰寫的陳述式清單所組成,可用來宣告區域變數和常數。

區域變數宣告

1
2
3
4
5
6
7
static void Declarations(string[] args)
{
int a;
int b = 2, c = 3;
a = 1;
Console.WriteLine(a + b + c);
}

區域常數宣告

1
2
3
4
5
6
static void ConstantDeclarations(string[] args)
{
const float pi = 3.1415927f;
const int r = 25;
Console.WriteLine(pi * r * r);
}

運算式陳述式

1
2
3
4
5
6
7
8
static void Expressions(string[] args)
{
int i;
i = 123; // Expression statement
Console.WriteLine(i); // Expression statement
i++; // Expression statement
Console.WriteLine(i); // Expression statement
}

「選取範圍陳述式」

可用來選取一些可能陳述式的其中之一,以根據某個運算式的值來執行。

if 陳述式

加入判斷條件。

1
2
3
4
5
6
7
8
9
10
11
static void IfStatement(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("No arguments");
}
else
{
Console.WriteLine("One or more arguments");
}
}

switch 陳述式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static void SwitchStatement(string[] args)
{
int n = args.Length;
switch (n)
{
case 0:
Console.WriteLine("No arguments");
break;
case 1:
Console.WriteLine("One argument");
break;
default:
Console.WriteLine($"{n} arguments");
break;
}
}

反覆運算陳述式

可用來重複執行內嵌的陳述式。

while 陳述式

while 迴圈寫法

1
2
3
4
5
6
7
8
9
static void WhileStatement(string[] args)
{
int i = 0;
while (i < args.Length)
{
Console.WriteLine(args[i]);
i++;
}
}

do 陳述式

1
2
3
4
5
6
7
8
9
static void DoStatement(string[] args)
{
string s;
do
{
s = Console.ReadLine();
Console.WriteLine(s);
} while (!string.IsNullOrEmpty(s));
}

for 陳述式

1
2
3
4
5
6
7
static void ForStatement(string[] args)
{
for (int i = 0; i < args.Length; i++)
{
Console.WriteLine(args[i]);
}
}

foreach 陳述式

1
2
3
4
5
6
7
static void ForEachStatement(string[] args)
{
foreach (string s in args)
{
Console.WriteLine(s);
}
}

跳躍陳述式

可用來轉移控制項。

break 陳述式

1
2
3
4
5
6
7
8
9
10
static void BreakStatement(string[] args)
{
while (true)
{
string s = Console.ReadLine();
if (string.IsNullOrEmpty(s))
break;
Console.WriteLine(s);
}
}

continue 陳述式

1
2
3
4
5
6
7
8
9
static void ContinueStatement(string[] args)
{
for (int i = 0; i < args.Length; i++)
{
if (args[i].StartsWith("/"))
continue;
Console.WriteLine(args[i]);
}
}

goto 陳述式

1
2
3
4
5
6
7
8
9
10
static void GoToStatement(string[] args)
{
int i = 0;
goto check;
loop:
Console.WriteLine(args[i++]);
check:
if (i < args.Length)
goto loop;
}

return 陳述式

1
2
3
4
5
6
7
8
9
static int Add(int a, int b)
{
return a + b;
}
static void ReturnStatement(string[] args)
{
Console.WriteLine(Add(1, 2));
return;
}

yield 陳述式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static System.Collections.Generic.IEnumerable<int> Range(int start, int end)
{
for (int i = start; i < end; i++)
{
yield return i;
}
yield break;
}
static void YieldStatement(string[] args)
{
foreach (int i in Range(-10,10))
{
Console.WriteLine(i);
}
}

throw 陳述式和 try 陳述式

可用來攔截在執行區塊時發生的例外狀況,而 tryfinally 陳述式則可用來指定不論是否發生例外狀況都一律會執行的最終處理程式碼。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
static double Divide(double x, double y)
{
if (y == 0)
throw new DivideByZeroException();
return x / y;
}
static void TryCatch(string[] args)
{
try
{
if (args.Length != 2)
{
throw new InvalidOperationException("Two numbers required");
}
double x = double.Parse(args[0]);
double y = double.Parse(args[1]);
Console.WriteLine(Divide(x, y));
}
catch (InvalidOperationException e)
{
Console.WriteLine(e.Message);
}
finally
{
Console.WriteLine("Good bye!");
}
}

checked 和 unchecked 陳述式

可用來控制整數型別算術運算和轉換的溢位檢查內容。

1
2
3
4
5
6
7
8
9
10
11
12
static void CheckedUnchecked(string[] args)
{
int x = int.MaxValue;
unchecked
{
Console.WriteLine(x + 1); // Overflow
}
checked
{
Console.WriteLine(x + 1); // Exception
}
}

lock 陳述式

可用來取得所指定物件的互斥鎖定、執行陳述式,然後釋放鎖定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Account
{
decimal balance;
private readonly object sync = new object();
public void Withdraw(decimal amount)
{
lock (sync)
{
if (amount > balance)
{
throw new Exception(
"Insufficient funds");
}
balance -= amount;
}
}
}

using 陳述式

可用來取得資源、執行陳述式,然後處置該資源。

1
2
3
4
5
6
7
8
9
static void UsingStatement(string[] args)
{
using (TextWriter w = File.CreateText("test.txt"))
{
w.WriteLine("Line one");
w.WriteLine("Line two");
w.WriteLine("Line three");
}
}

參考資料

陳述式