跳到主要內容

引數?! 參數??!! 什麼鬼啊!!

我想這個不僅是只有我會遇到的問題, 大概也是所有 Programming 的人都有的疑惑 (應該是吧?)
什麼引數?? 什麼參數?? 天啊... 到底是誰翻譯的呀!!!!

就字面上來看... 講句實在話, 我真的不了解, 大概是學藝不精所致.
也許有些人認為 => 管它那麼多!! 寫得出來就好了!!
不過龜毛如我, 我還是想搞清楚定義是什麼!

* 翻譯為引數的原文為 Argument
書[1]裡寫的說明為: 當你呼叫函式的時候, 你可以放在括號內的東西,
doStuff("a", 2); //呼叫 doStuff, 所以 a 和 2 是引數

* 翻譯為參數的原文為 Parameter
書[1]裡寫的說明為: 放在函式的標記式, 用來說明這個函式, 當它被呼叫時必須接收到什麼樣的資料,
void doStuff(String s, int a) {} // 我們預期兩個參數: String 和 int

書上說明似乎很清楚, 看完之後彷彿有種豁然開朗的感覺, 好像... 好像懂了!!!
原來引數是呼叫函式時輸入的資料, 而參數是定義函式時的資料形態
真的是這樣嗎??

換個例子試試看
int sumValue;
int value1 = 10;
int value2 = 20;

sumValue = sum(value1, value2);

int sum(int v1, int v2) {
    return v1 + v2;
}

所以在這個範例中, 什麼是引數? 什麼是參數?
依據得到的結論, 引數是 value1 和 value2, 參數是兩個 int
然而這樣的答案卻讓我很困惑, 既然引數可以是變數, 那為什麼還要跟參數做區別呢?

於是到網路上搜尋關於引數與參數的資料, 想要搞清楚這是怎麼一回事.
經過一番搜尋, 找到一個非常清楚的說明[2]
Parameter - A parameter is an intrinsic property of the procedure, included in its definition
Argument - The arguments are the values actually supplied to the procedure when it is called
這就清楚多了, 參數是屬於函式定義的屬性, 而引數是呼叫函式時提供給函式的實際數值.
所以, 之前那個例子中, 什麼是參數? 什麼是引數?
函式 sum 有兩個參數, 個別為資料形態為 int 的 v1 與資料形態為 int 的 v2
引數不是 value1 或 value2, 而是在呼叫 sum 這個函式時, 輸入的 value1 和 value2 那時的實際數值, 個別為指派給參數 v1 的 10 與指派給參數 v2 的 20

花了一些時間才搞懂這兩個名詞的定義, 或許有人會覺得沒有意義.
但對我來說, 定義了解的越清楚, 代表基礎打的越好, 除了在溝通上不會因為彼此用語不同而造成誤解外, 更重要的是, 自己遇到問題要表達時, 不會讓別人聽不懂.


註[1] - SCJP Java 5.0 專業認證手冊 - 碁峰資訊股份有限公司
註[2] - Wikipedia Parameter (computer science)

留言

Jerry寫道…
感謝,受益良多^^

這個網誌中的熱門文章

誰讓你心動, 誰讓你心痛, 誰會讓你偶而想要擁他在懷中... 誰又在乎你的夢, 誰說你的心思他會懂, 誰為你感動... 許久沒聽到這熟悉的詞與曲, 更懷念那甜美細膩的好嗓音. 於是趁著空檔, 拿出了放在那如同收藏我的回憶般, 收藏櫃子裡頭的兩張專輯.

第二章 緊急返鄉 - 推著爺爺去散步

也許是曾經身為軍人的關係, 爺爺很排斥使用輪椅... 也許是曾經身為一家之主的榮耀, 縱使小便不方便卻堅持不肯使用尿壺... 也許就是因為爺爺是爺爺, 所以很少開口要我幫忙他些什麼凡是自己來, 總是他在給我, 我卻很少能給他什麼... 只是兩次的手術, 在病床上躺久了, 他的身體狀況真的大不如前... 沒辦法想自己起來走走就走走, 想坐到沙發就坐到沙發, 想拿起遙控器看看電視就拿, 想回房休息就回房間. 這樣的光景, 以前是再熟悉不過的... 很希望爺爺真的能趕快好起來, 而回家時一切都沒變, 爺爺看到我回家開心大笑起身握握我的手... 現在的他, 只能任我們宰割... 儘管他再怎麼使勁, 那纖細的雙腿依然撐不住他的身子, 不喜歡輪椅也得坐輪椅... 儘管他再怎麼不願意, 行動不方便的他還是被我們包了尿布, 不喜歡尿布也得包尿布... 爺爺一點點的隱私, 一點點的尊嚴也不剩, 連不願意吃飯, 都被我們直接灌食, 連絕食的權力都沒有...