DAY 07 方法
方法
方法是包含一系列陳述式的程式碼區塊。
程式會造成呼叫方法並指定任何所需的方法引數來執行陳述式。
簡單說方法就是把你本來一長串的程式碼包起來,如果不使用方法的話,可以想像全部東西都塞在 Main 函式裡面,那這個 code 很大機率是難懂難改的。
題外話:個人習慣把有回傳值的 function 稱為方法,無回傳值的 function 稱為函式,只是中文的用詞不同而已,想一想我覺得先說明好了,不然一下方法一下函式,我怕新手會搞不懂,至於回傳值又是什麼後面會解釋。
在介紹方法前,繼續拿 99 乘法表來玩,變形一下讓使用者輸入兩個數字,列印出兩數之間的乘法表,例如輸入 5 和 7 則顯示
1 | 5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 |
先介紹如何在 Console 輸入,首先我們要先去改 launch.json
,因為console
預設是internalConsole
,在 VSCode 看到的 Console 是不能輸入東西的,我們要讓他彈出來,將internalConsole
改成externalTerminal
就可以。
如果拿之前的範例程式執行,會發現彈了一下就消失,因為程式瞬間印出瞬間結束就關掉了,所以我們讓程式執行讀取使用者行為的方法Console.ReadLine()
,這方法可以讀取使用者輸入的文字直到按下 Enter 鍵。
然後我們就可以來撰寫變種 99 乘法表了
1 | Console.WriteLine ("請輸入開始的數字"); |
1 |
|
Console.WriteLine (“請輸入開始的數字”);
int start = int.Parse (Console.ReadLine ());
Console.WriteLine (“請輸入結束的數字”);
int end = int.Parse (Console.ReadLine ());
for (int i = 1; i <= end; i++) {
for (int j = 1; j <= end; j++) {
Console.Write ($”{i} * {j} = {i * j}\t”);
}
Console.Write (“\n”);
}
for (int i = start; i <= end; i++) {
for (int j = start; j <= end; j++) {
Console.Write ($”{i} * {j} = {i * j}\t”);
}
Console.Write (“\n”);
}
for (int i = start; i <= 9; i++) {
for (int j = start; j <= 9; j++) {
Console.Write ($”{i} * {j} = {i * j}\t”);
}
Console.Write (“\n”);
}
Console.ReadKey ();
1 |
|
static void Main (string[] args) {
Console.WriteLine (“請輸入開始的數字”);
int start = int.Parse (Console.ReadLine ());
Console.WriteLine (“請輸入結束的數字”);
int end = int.Parse (Console.ReadLine ());
MultiplicationTable (1, end);
MultiplicationTable (start, end);
MultiplicationTable (start, 9);
Console.ReadKey ();
}
static void MultiplicationTable (int start, int end) {
for (int i = start; i <= end; i++) {
for (int j = start; j <= end; j++) {
Console.Write ($”{i} * {j} = {i * j}\t”);
}
Console.Write (“\n”);
}
}
1 |
|
static void Main (string[] args) {
MultiplicationTable ();
Console.ReadKey ();
}
static void MultiplicationTable (int start = 5, int end = 8) {
for (int i = start; i <= end; i++) {
for (int j = start; j <= end; j++) {
Console.Write ($”{i} * {j} = {i * j}\t”);
}
Console.Write (“\n”);
}
}
1 |
|
static void Main (string[] args) {
int number = Add (5, 6);
Console.WriteLine (number);
}
static int Add (int a1, int a2) {
return a1 + a2;
}
1 |
|
static void Main (string[] args) {
MultiplicationTable (end: 5, start: 2);
Console.ReadKey ();
}
static void MultiplicationTable (int start, int end) {
for (int i = start; i <= end; i++) {
for (int j = start; j <= end; j++) {
Console.Write ($”{i} * {j} = {i * j}\t”);
}
Console.Write (“\n”);
}
}
1 |
|
static void Main (string[] args) {
MultiplicationTable (2, end: 9);
Console.ReadKey ();
}
static void MultiplicationTable (int unused1, int unused2 = 3, int start = 5, int end = 8) {
for (int i = start; i <= end; i++) {
for (int j = start; j <= end; j++) {
Console.Write ($”{i} * {j} = {i * j}\t”);
}
Console.Write (“\n”);
}
}
方法的參數不一定要有用到才宣告,像上面我多了兩個無用的參數,透過使用選擇性引數,無預設值的參數需放在前面,所以第一個引數 2 為參數 unused1 所用,而具名引數 end 當然是給參數 end 使用。
### 一些小結論
雖然修飾詞與方法參數關鍵字都沒有說明,但現階段可以算是了解一個 function 的使用方式與時機,還有名詞的差異,如果關於方法有任何問題都可以留言喔~
感謝閱讀。
參考連結
[方法 (C# 程式設計手冊) | Microsoft Docs]
[方法參數 (C# 參考) | Microsoft Docs]
[方法 (C# 程式設計手冊) | Microsoft Docs]: https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/classes-and-structs/methods
[方法參數 (C# 參考) | Microsoft Docs]:https://docs.microsoft.com/zh-tw/dotnet/csharp/language-reference/keywords/method-parameters