Semorphe

變數

一個名字,指著一個會變的東西。 · ⏱ 約 25 分鐘

你會學到三件事

  1. 程式裡的變數,和數學的未知數哪裡不一樣
  2. 名字可以怎麼取——規則(不守會編不過)和慣例(不守別人會看不懂)
  3. 為什麼「看得懂」比「打得快」重要

開始之前

數學課解過這種題目:

x + 3 = 10     求 x

那個 x 是未知數:它的值已經定了,只是你還不知道是多少。 你在做的事叫「求解」——把那個一直都在的答案找出來。

上一課寫的 int age = 16; 看起來很像,而它是另一件事。

int age = 16;
age = 17;      // 這在數學上是矛盾的

程式裡的變數不是「還不知道」,是「現在裝著什麼」。 它會變, 而且是你叫它變的。

🔴 先自己試一次,一分鐘就好:

① 點下面那顆按鈕 —— 畫布上已經幫你放好 int age = 16; 與一行印出
② 在中間插一行:age = age + 1;
③ 按執行

猜一下會印出什麼,再按。⚠️ 猜錯比猜對值錢。

到編輯器試試看:先試試看:age 能不能等於 age + 1

🟢 先把編輯器打開,跟著下面一起做:跟著做

一、三個差別

數學的未知數 程式的變數
值 已經定了,等你找出來 你放什麼就是什麼
會不會變 不會 會,而且會變很多次
= 的意思 兩邊相等 把右邊放進左邊

第三個差別第 6 課會整整講一節。現在只要知道:= 讀成「放進去」, 所以 age = 17; 讀成「把 17 放進 age」,不矛盾。

積木盤上那一顆就是這樣寫的:「把 … 設成 …」 ——它的名字本身就在說「這不是相等,是放進去」。

🟢 有一個比喻很好用:變數是一個貼了名字的盒子。

  ┌──────┐
  │  16  │   ← 裡面裝的東西(值),可以換
  └──────┘
    age      ← 貼在外面的名字,不會換

⚠️ 而那個盒子有大小——那是上一課的型別。int 的盒子只裝得下整數。

二、名字可以怎麼取:規則

這幾條是編譯器在管的。不守,程式跑不起來:

規則 例子
只能用英文字母、數字、底線 score2 ✅ score-2 ❌
不能用數字開頭 n1 ✅ 1n ❌
大小寫不同就是不同的名字 age 和 Age 是兩個變數
不能用 C++ 自己的字 int、if、return… ❌

⚠️ 第三條最會咬人:宣告 int score; 之後寫 Score = 90;, 電腦會說「我不認得 Score」,而你看了半天覺得明明就寫了。

三、慣例:編譯器不管,而人會看

下面這些不守也編得過。它們存在的理由只有一個:讓人看得懂。

這一節的程式碼不用打,看一眼就好。

🚫 這一段是反例——課文在說不要這樣寫,別照著拉。

1int a;          // ❌ 一個字母,三行之後你就忘了它是什麼2int scr;        // ❌ 省下兩個字母,換來每次都要想一下3int score;      // 🟢 看到名字就知道它裝什麼
宣告int(整數)變數score宣告int(整數)變數scr宣告int(整數)變數a123

取名字的判準只有一句:三天後的你看得懂嗎。

其他幾條大家都在用的:

慣例 寫法
多個字用駝峰 totalScore、maxValue
不會變的東西全大寫 MAX_SIZE
計數用 i、j、k ⚠️ 這是例外——迴圈的編號大家都這樣寫,反而好懂
布林用是非題的口氣 isEmpty、hasNext

🔴 為什麼這件事值得一整節:你寫的程式,讀的次數遠多於寫的次數。 一個看不懂的名字,每一次讀都要付一次代價,而你會讀很多次。

程式是寫給人看的,只是剛好電腦也能跑。

完成的樣子

這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。

1#include <iostream>2using namespace std;3int main() {4    int score = 90;5    int bonus = 5;6    score = score + bonus;7    cout << score << endl;8    return 0;9}
905變數score變數score變數bonus+變數score換行印出把設成宣告int(整數)變數bonus=宣告int(整數)變數score=4567

把積木打散,自己排回去:排回去:把剛才那支程式的積木排好

換你了

把上面那支程式的 score 改名成 s、bonus 改名成 b,執行一次。

答案一模一樣。 而現在回頭讀那支程式,你還說得出它在做什麼嗎?

到編輯器做這一題:練習:把名字改壞,再改回來

做一個

幫三個變數取名字。一支程式要記住一個學生的三件事: 年齡(整數)、三科平均(有小數)、有沒有及格(真或假)。 宣告這三個變數、各給一個值、各印一行。

⚠️ 三個值直接寫死就好——這一題考的是名字,不是計算。 (平均怎麼算、及格怎麼判,那是後面的課。)

🔴 這一題沒有裁判——名字是你取的。

做完把你的三個名字跟旁邊的人交換看,不解釋。 他看得懂,那個名字就是好的。

到編輯器做這一題:做一個:幫三個變數取名字

這一課你做了什麼

如果卡住了

你看到 多半是因為
Score 沒有宣告 大小寫不同就是不同的名字
1n 那一行編不過 名字不能用數字開頭
int int; 編不過 int 是 C++ 自己的字,不能拿來當名字
改了名字,別的地方報錯 用到那個名字的每一處都要一起改(改名不是只改宣告)
在編輯器打開這一課 →