時常在不同程式的文件中,看到這個字 "invoke",通常都以 "function" 作為主詞連著用,就是 "invoke a function" ...之類的。
invoke 查詢網路字典(yahoo,google),得到的翻譯如下:
- 調用(資源)
- 祈求(神等)庇護,乞靈於
- 以法術咒語招(鬼怪等)
- 懇求,祈求,乞求[(+on/upon)]
- 訴諸(法律等);行使(法權等)
- 喚起;引起;造成
invoke 在不同的主詞,不同的情況,有不同的定義,在 programming 領域中又該怎麼定義,使用它呢?
這個問題一直困擾我很久,過去我都用 "召喚 or 調用 function" 來解釋,最近才開始認真搜尋彙整資料,得出精確的定義。
invoke = execute = run = launch = start = (自動) 被呼叫並執行
call = (手動) 呼叫並執行
call = (手動) 呼叫並執行
對 invoke 的研究,起源於 w3school 上面看到的一段話 "... a JavaScript function can be invoked without being called"
這段話的翻譯也就是 "javascript function 不需要被呼叫,也能自動執行"
對一般工程師來說,call function 的意思就是 "呼叫函數並且執行它","call" 就等於 "執行",但是上面這段話把 "call" 和 "invoke(執行)" 兩件事分開了。
google 之後,在 wiki 對於 execution (computing) 的解釋 中查到了一段話 " ...a user starting (or launching or invoking) a program, ..."。
既然 wiki 將 invoke 和 launch 和 start 當成是同義字,而 wiki 又是公認最為正確公平的百科全書之一,那就八九不離十可以得到 invoke 在程式領域中就是 "執行" 的結論。
那麼 "call function (呼叫函數)" 和 "invoke function (執行函數)" 到底有甚麼差異呢?
在以往上課所學的基礎中,這兩個詞彙對我們來說是同義的,不會去思考它們的差異。
後來又四處 google,在 Quora 上找到了一篇問答 "What is the difference between call and invoke",由一位印度籍的工程師 Tavish Bhagat 做出淺顯易懂的解釋。
以下引用他的回答全文:
-----
Function calling is when you call a function yourself in a program.
While function invoking is when it gets called automatically.
For Example, consider this code..
struct s
{
int a,b,s;
s()
{
a=2;
b=3;
}
void sum()
{
s=a+b;
}
};
void main()
{
struct s obj; //line 1
obj.sum(); // line 2
}
Here, when line 1 is executed, the function(constructor, i.e. s) is invoked.
When line 2 is executed, the function sum is called."
-----
結論: 以實例學習(learning from example),比抽象化的解釋要有效率。從工作中學,比從課本上學的要多。
沒有留言:
張貼留言