iOS新手入門 — 變數三部曲(1/3) — 變數基礎概念

威爾哥(Will, Tsai)
蔡胖想學做生意
9 min readJul 21, 2018

諸君!

好久不見!

沒錯,我就是

人帥心善打字快, 寫code debug樣樣來 的 威爾哥!

歡迎來到威爾哥的iOS小教室。

在這個網購比實體店面盛行的時代,相信大家一定都有上網買東西的經驗。

只要我們在網路上點點手指,過幾天就會收到一個包裹,接下來我們就可以開開心心地拿到房間裡開箱啦,多麽簡單,愉快!

但是收到包裹開心的開箱這件事是建立在包裹裡面裝的是我們想要的,或者是我們購買的東西。

你想想,

萬一有一天,我們帶著錢包,逛網拍,一邊下單還唱著歌,等到開箱的時候才發現對方東西寄錯了!

所以東西不寄錯的日子,才是好日子~~~~。

恩….好,離題了。

總而言之,今天我們要講的主題是,變數,英文寫成variable。

本篇文章總共分為以下幾個部分

  1. 什麼是變數?
  2. 怎麼宣告變數?
  3. 全域變數與區域變數的區別
  4. 變數的可視範圍
  5. 全域變數就是屬性?
  6. 實作影片
  7. 結論

什麼,你說這篇文章感覺有點長。

其實也還好啦,大概就…

大概這麼長吧…

好,不管是香腸還是米腸,我們通通要把他們嗑掉!嗑掉!

那麼各位同學請把安全帶繫上吧,我們要出發囉,GO~~~~~~!

什麼是變數?

首先,讓我們來看一下比較常見一點的說法,

變數是一種可儲存資料的型態。

每個變數在宣告的時候,必須要指定一個型別。

給予型別之後,該變數只能儲存該型別的資料。

變數又分為變數與常數,

變數代表其儲存的值可以變更。

常數代表該變數的值第一次設定之後便不能改變。

如何?是不是非常好懂啊!

義大利?維大力?

套句對岸網友說的話

好吧,那換個說法好了。

變數就是一個箱子,我們可以在箱子裡面放東西。

不過在我們開始放東西之前,我們要先想好這個箱子要放什麼東西。

例如內衣褲就不能跟海鮮放在一起。

不然之後穿出去,大家覺得你身上一股海鮮味,對我們的人生會起到負面的影響,實在不太好。

因此,我們要秉持著『一個箱子只能放一種東西』的規定。

等我們決定要存放什麼種類的物品之後,我們要在箱子外面貼一個標籤,寫上此盒子只能放XXX,請勿亂放。(給予型別

貼上標籤以後,從此這個箱子『只能存放標籤上註明的種類的物品』

等東西放好之後,如果我們沒有把箱子用膠帶封起來,那麼我們隨時可以放不同的東西進去箱子裡面。(變數

但是如果我們把箱子用膠帶封住之後,裡面儲存的值就不能再改變啦!(常數

如何,這樣的說法是否比較好懂一點呢?

小結:變數就像箱子一樣可以儲存不同型態的資料,變數指定接受的資料型別之後,不同的型別就不能放入此變數。變數有兩種,
變數:保存的值可以改變。
常數:只能設定一次保存的值,之後不能改變。

怎麼宣告變數呢?

那麼在Swift中,我們要怎麼宣告變數呢?

好的,上圖就是一個簡單的變數宣告的格式。

在圖中我們宣告了一個變數名為name的變數,型別是字串,儲存的值是”金城武”

那要怎麼宣告一個常數呢?

好,這次我們宣告了一個常數,常數名是name,型別是String,儲存的值為”金城武”。

咦,等等,好像哪邊不太對!(#越想越不對勁)

這兩個例子不就只差在一個最前面是var ,一個最前面是 let嗎?

沒錯,答案就是這麼簡單。

小結:
使用關鍵字 var宣告的是變數,儲存的值可以不斷改變
使用關鍵字 let宣告的是常數,儲存的值只能設定一次,之後便不能改變。

公用的還是私用的?Global變數 VS Local變數

根據變數宣告的位置,變數又可以分為全域變數與區域變數。

首先讓我們先搞清楚一件事情,在一個class裡面,我們的變數可以在哪邊宣告。

下圖是一個人類的class

首先,我們可以看到有一個變數name,宣告在class Human後面的大括號{ }裡面。

宣告在這邊的變數,一般我們稱為全域變數(global variable)

而下圖

在這個圖中,我們可以看到有一個變數叫做betterName,被宣告在getBetterName這個方法裡面。

宣告在『方法裡面的變數』,一般我們稱為 區域變數(Local Variable)

那麼這兩種變數有什麼差別呢?

答案是,他們的可視範圍(Scope)不同。

什麼是變數的可視範圍(Scope)

簡單的說,

可視範圍就是該變數在程式中可以被存取的範圍。

全域變數在整個class裡面都可以存取。

但是區域變數只有在宣告這個變數的方法裡面可以存取。

不同方法之間的區域變數都不能在該方法以外的地方被使用。

換個說法,

變數是一個箱子,而看的到的箱子才能使用。

如果我們將整個class 想成一個社區。

每一個方法代表該社區內的一戶人家。

區域變數代表每戶人家自己家裡面的箱子。

因為別人看不到我們家裡有什麼箱子,所以不能隨便拿東西塞到我們家的箱子裡面。

而全域變數就是放在社區裡面的公用箱子,每一戶人家都看的到這些公用箱子,所以可以自由的在這些公用箱子裡面放東西或者拿東西出來。

是不是很簡單呢?

小結:
全域變數與區域變數的可視範圍(Scope)不同
全域變數在整個Class裡面都可以存取。
區域變數只在定義該變數的方法中可以存取。

什麼是屬性(Property)?

講完了變數之後,讓我們接著來了解一下什麼是屬性!

首先,屬性是在物件導向中組成類別(Class)的基本元素之一。

屬性通常用來描述物件所具有的特徵,

每個屬性可以儲存或者提供特定型別的資訊

例如,

人類這個物件,

特徵有:皮膚顏色,頭髮顏色,單眼皮雙眼皮…

皮膚跟頭髮顏色可以儲存的資訊為 : 顏色

眼皮種類可以儲存的資訊為:單眼皮,雙眼皮

而這些資訊我們都會存放在變數裡面。

等等...你說資訊存在變數裡面?然後屬性可以儲存特定型別的資訊?

這個解釋好像有點眼熟…..是不是在哪邊看過呢?

沒錯,屬性就跟變數本質上就是一樣的東西!

更明確的說,『屬性其實是跟全域變數是一樣的東西』

小結:
屬性就是全域變數。

那麼屬性跟區域變數有哪邊不一樣呢?

在上面這篇物件導向的文章中提過,屬性是用來描述物件特徵用的。

因此當屬性做出改變的時候,其代表的意義是『類別的特徵改變了』。

如果類別的特徵改變了,則使用此類別製造出來的物件也都會受到影響。

舉例來說,如果在人類這個類別中,刪除了名字的屬性,則從此以後人類物件全部都沒有名字了。

萬一在程式中的某個地方有使用到人類的名字這個屬性,一旦我們刪除了這個屬性之後,可能導致整個程式都無法執行。

相較之下,

如果只是一個普通的區域變數被改變了,則受影響的層面只有該方法內部。

對於整體而言,並不會有任何影響。

例如把前面例子中的betterName改為myName,對整個class來說,並不會有任何影響。

整個程式還是可以正常的運作。

這就是屬性與區域變數的差別。

小結:
屬性是全域變數,代表的意義是,該類別的特徵。
所以屬性是屬於整個Class所共有的。
屬性產生變化,『會影響』整體程式的運行。
區域變數,是屬於某個方法所獨有的。
區域變數產生變化,『不影響』整體程式的運行。

那麼可以實際操作一次給我們看看嗎?

當然可以!

導播,上影片~~~~~~

這次剪接上有點不順暢,請多多包涵啦!

下期預告 — Swift中的『 屬性 』

這篇文章主要是講解關於變數的概念,以及稍微提到一下屬性到底是什麼東西。

如果要了解Swift中的變數的話,根據官方的文件,其實Swift中沒有區域變數與全域變數,而是全域屬性以及區域屬性。

而屬性又有getter,setter還有property observer等特性.

阿…好多東西沒提到啊…

不過如果把這些話題通通塞到這篇文章的話,大概沒人會想看到完吧…

所以,下一集就讓我們先從Swift中的Property開始聊起吧,GOGOGO!

結論

話說,如果我們在網路上搜尋屬性,變數…等關鍵字,其實會有很多資料與解釋。但是根據『使用的語言』不同,對同樣的名詞會有很多不同的解釋。所以極有可能看越多資料越是糊塗。

還好,正所謂萬變不離其宗,寫程式這種事情,雖然使用的語言種類繁多,包山包海,但是只要基礎觀念懂了,那麼後面再學習其他不同語言也能夠很快上手。

所以建議一開始還是先鎖定一種語言深入學習。

而要了解一個觀念,最重要的還是多多動手做。相信很快就可以融會貫通啦!

好,那麼就這樣啦,大家掰掰~

持續關注威爾哥,學習iOS笑呵呵。

威爾哥的iOS小教室,我們下次見!

️千山萬水總是情,按個「拍手」行不行。如果你覺得我的文章還不錯,可以「Follow」我,然後順手按個拍手鼓勵鼓勵我!我會非常高興的。按住👏 1秒 ,神清氣爽。
按住👏 5秒 ,通體舒暢。
按住👏 10秒,說吧,要吃什麼,今晚宵夜我請。
謝謝大家!

--

--

威爾哥(Will, Tsai)
蔡胖想學做生意

作者自稱威爾哥,是個想養貓但是自己都需要人養,漂流在墨爾本的程式設計師,曾經碰過前端開發,後端開發,android開發,現在主要研究iOS開發,興趣是寫寫廢文跟大家分享。