iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0

在前一篇,我們學會了變數與運算子,能處理像「成交金額 = 價格 × 成交量」這樣的計算。
不過選股工具真正有用的地方是:能根據 條件 來判斷一檔股票是否該被觀察。

今天,我們來學 C# 的流程控制:if/else 與 switch


為什麼需要條件判斷

舉例來說:

  • 如果股價大於目標價 → 加入觀察名單
  • 否則 → 忽略

這就是程式中的「分支」。如果沒有條件判斷,程式就只能一成不變,沒辦法根據情況作出不同反應。


if/else 基本用法

最簡單的範例:

double price = 120;
double target = 100;

if (price > target)
{
    Console.WriteLine("股價高於目標價,進入觀察名單");
}
else
{
    Console.WriteLine("股價未達目標價,忽略");
}

輸出:

股價高於目標價,進入觀察名單

三元運算子 (Ternary Operator)

有時候 if/else 區塊很短,寫起來就顯得冗長。
C# 提供了「三元運算子」可以讓程式更精簡:

double price = 120;
double target = 100;

Console.WriteLine(
    (price > target) 
    ? "股價高於目標價,進入觀察名單" 
    : "股價未達目標價,忽略"
);

👉 建議:三元運算子適合「單一判斷 + 單行結果」的場合,如果邏輯複雜還是用 if/else 比較清楚。


switch 的使用場景

當條件很多時,使用 if/else 會讓程式變得很亂,這時候 switch 更清楚。

標準寫法:

string mode = "技術面";

switch (mode)
{
    case "基本面":
        Console.WriteLine("模式:基本面分析");
        break;
    case "技術面":
        Console.WriteLine("模式:技術分析");
        break;
    case "籌碼面":
        Console.WriteLine("模式:籌碼分析");
        break;
    default:
        Console.WriteLine("未知的模式");
        break;
}

switch 的簡化技巧

有時候 default 可以和某些 case 共用邏輯,程式就會更緊湊:

string mode = "技術面";

switch (mode)
{
    default:
    case "基本面":
        Console.WriteLine("模式:基本面分析");
        break;
    case "技術面":
        Console.WriteLine("模式:技術分析");
        break;
    case "籌碼面":
        Console.WriteLine("模式:籌碼分析");
        break;
}

👉 這樣的寫法代表:

  • mode 沒有符合任何 case,或等於 "基本面" 時,都會進入「基本面分析」。

⚠️ if/else 的限制

雖然 if/else 非常好用,但它並不是萬能的。
如果條件太多,一路寫下來就會變成「階梯狀地獄」── 可讀性差、維護困難。

像下面這張圖的例子:
https://ithelp.ithome.com.tw/upload/images/20250914/20121224uMB0WYPlQp.jpg
程式碼沒有語法錯誤,但充滿了巢狀的 if/else if
這種寫法短期內能跑,但:

  • 難以維護:要新增或修改條件非常痛苦。
  • 可讀性差:一眼看不出邏輯在做什麼。
  • 容易出錯:多層條件下容易遺漏或重複。

👉 解決方式:

  1. switch 改寫
  2. 拆成方法(讓每個條件是獨立小函式)
  3. 進階:用資料結構或設計模式(之後會講到 OOP 時介紹)

Console 完整範例

最後我們把今天的重點整合到一個 Console 程式:

using System;

class Program
{
    static void Main(string[] args)
    {
        // 股票資訊
        string stock = "TSMC";
        double price = 540.5;

        // 使用者設定目標價
        double target = 500;

        // if/else 判斷
        if (price > target)
        {
            Console.WriteLine($"股票 {stock} 股價 {price} 高於目標價 {target} → 加入觀察名單");
        }
        else
        {
            Console.WriteLine($"股票 {stock} 股價 {price} 未達目標價 {target} → 忽略");
        }

        // 三元運算子 (簡化 if/else)
        Console.WriteLine(
            (price > target) 
            ? "使用三元運算子:股價達到目標價" 
            : "使用三元運算子:股價未達目標價"
        );

        // 使用 switch 判斷觀察模式
        string mode = "技術面";

        switch (mode)
        {
            default:
            case "基本面":
                Console.WriteLine("模式:基本面分析");
                break;
            case "技術面":
                Console.WriteLine("模式:技術分析");
                break;
            case "籌碼面":
                Console.WriteLine("模式:籌碼分析");
                break;
        }
    }
}

執行結果:

股票 TSMC 股價 540.5 高於目標價 500 → 加入觀察名單
使用三元運算子:股價達到目標價
模式:技術分析

小結

今天我們學會了:

  • if/else → 處理二選一或多層條件
  • 三元運算子 → 簡化 if/else 的寫法
  • switch → 適合一個值多種情境,還能簡化 default 與 case 共用邏輯
  • if/else 的限制 → 條件太多時會變混亂,需要用更好的結構

上一篇
Day 2 - C# 語法基礎:變數、資料型別與運算子
下一篇
Day 4 - 迴圈:for、foreach、while
系列文
30天快速上手製作WPF選股工具 — 從C#基礎到LiteDB與Web API整合11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言