Semorphe

變數

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

你會學到三件事

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

開始之前

數學課解過這種題目:

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
大小寫不同就是不同的名字 ageAge 是兩個變數
不能用 C++ 自己的字 intifreturn… ❌

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

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

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

int a;          // ❌ 一個字母,三行之後你就忘了它是什麼
int scr;        // ❌ 省下兩個字母,換來每次都要想一下
int score;      // 🟢 看到名字就知道它裝什麼

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

其他幾條大家都在用的:

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

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

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

完成的樣子

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

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換行0回傳印出設成宣告int(整數)變數bonus=宣告int(整數)變數score=定義函式 回傳型別int(整數)main使用命名空間std引入函式庫iostream(輸入輸出)12345678

到編輯器照著做一次:跟著做

換你了

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

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

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

做一個

幫三個變數取名字。 一支程式要記住:一個學生的姓名、他的三科平均、 以及他有沒有及格。宣告這三個變數並印出來。

🔴 這一題沒有裁判——名字是你取的。 ⚠️ 而做完把你的三個名字跟旁邊的人交換看,不解釋。 他看得懂,那個名字就是好的。

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

這一課你做了什麼

如果卡住了

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