變數
一個名字,指著一個會變的東西。 · ⏱ 約 25 分鐘
你會學到三件事
- 程式裡的變數,和數學的未知數哪裡不一樣
- 名字可以怎麼取——規則(不守會編不過)和慣例(不守別人會看不懂)
- 為什麼「看得懂」比「打得快」重要
開始之前
數學課解過這種題目:
x + 3 = 10 求 x
那個 x 是未知數:它的值已經定了,只是你還不知道是多少。
你在做的事叫「求解」——把那個一直都在的答案找出來。
上一課寫的 int age = 16; 看起來很像,而它是另一件事。
int age = 16;
age = 17; // 這在數學上是矛盾的
程式裡的變數不是「還不知道」,是「現在裝著什麼」。 它會變,
而且是你叫它變的。
到編輯器做這一題:先試試看:x 能不能等於 x + 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」,而你看了半天覺得明明就寫了。
三、慣例:編譯器不管,而人會看
下面這些不守也編得過。它們存在的理由只有一個:讓人看得懂。
int a; // ❌ 一個字母,三行之後你就忘了它是什麼
int scr; // ❌ 省下兩個字母,換來每次都要想一下
int score; // 🟢 看到名字就知道它裝什麼
取名字的判準只有一句:三天後的你看得懂嗎。
其他幾條大家都在用的:
| 慣例 |
寫法 |
| 多個字用駝峰 |
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}
到編輯器照著做一次:跟著做
換你了
把上面那支程式的 score 改名成 s、bonus 改名成 b,執行一次。
答案一模一樣。 而現在回頭讀那支程式,你還說得出它在做什麼嗎?
到編輯器做這一題:練習:把名字改壞,再改回來
做一個
幫三個變數取名字。 一支程式要記住:一個學生的姓名、他的三科平均、
以及他有沒有及格。宣告這三個變數並印出來。
🔴 這一題沒有裁判——名字是你取的。
⚠️ 而做完把你的三個名字跟旁邊的人交換看,不解釋。
他看得懂,那個名字就是好的。
到編輯器做這一題:做一個:幫三個變數取名字
這一課你做了什麼
- 你知道程式的變數和數學的未知數不是同一件事
- 你知道哪些名字編譯器不准,哪些是人之間的約定
- 你試過把名字改壞,看它怎麼影響「讀得懂」
如果卡住了
| 你看到 |
多半是因為 |
Score 沒有宣告 |
大小寫不同就是不同的名字 |
1n 那一行編不過 |
名字不能用數字開頭 |
int int; 編不過 |
int 是 C++ 自己的字,不能拿來當名字 |
| 改了名字,別的地方報錯 |
用到那個名字的每一處都要一起改(改名不是只改宣告) |
在編輯器打開這一課 →