藍(lán)圖中事件、函數(shù)的區(qū)別 护锤?
1.Delay/timeslines這些需要等待時間的節(jié)點官地,事件中可以調(diào)用,函數(shù)不能調(diào)用烙懦。
2.函數(shù)可以有返回值驱入,事件沒有返回值。 原因:1).函數(shù)調(diào)用會立刻執(zhí)行并等待結(jié)果,事件調(diào)用只是觸發(fā) 沧侥;2).函數(shù)執(zhí)行在同一線程可霎,事件執(zhí)行在不同線程
3.函數(shù)可以用局部變量,事件沒有局部變量宴杀。
4.因為函數(shù)執(zhí)行順序有保證癣朗,所有優(yōu)先使用函數(shù)。
5.沒有返回值的函數(shù)旺罢,在被子類Overide時旷余,會變成事件。
函數(shù)扁达,事件正卧,宏的區(qū)別
一、語法上的區(qū)別
1.執(zhí)行引腳
調(diào)用函數(shù)和發(fā)射事件只能有一個執(zhí)行引腳跪解,而宏在調(diào)用的時候可以有很多執(zhí)行引腳進(jìn)入或者輸出炉旷。
2.返回值
事件被觸發(fā)了在執(zhí)行觸發(fā)事件的邏輯之后,沒有返回值叉讥,函數(shù)和宏有返回值窘行。
3.延遲節(jié)點
自定義事件可以通過添加一個系統(tǒng)自帶的延遲節(jié)點,來延遲事件觸發(fā)后的執(zhí)行邏輯图仓,而函數(shù)和宏不能添加這個延遲節(jié)點罐盔,函數(shù)的調(diào)用會立即執(zhí)行并等待結(jié)果,而事件的調(diào)用只是觸發(fā)救崔。當(dāng)我們在調(diào)用函數(shù)的時候惶看,系統(tǒng)一定會等函數(shù)執(zhí)行結(jié)束返回結(jié)果后,才會有后續(xù)動作六孵,而事件的調(diào)用纬黎,只是觸發(fā)了這個事件的開始,系統(tǒng)就繼續(xù)往下執(zhí)行了劫窒。
4.允許訪問范圍
函數(shù)和事件可以跨藍(lán)圖類訪問莹桅,而宏只能允許當(dāng)前定義宏的藍(lán)圖類訪問,而宏庫可以跨藍(lán)圖訪問烛亦,宏庫需要選擇父類,如果選擇Actor作為父類懂拾,則所有Actor的類及其子類都可以使用該宏庫煤禽。Object是所有類的父類,如果創(chuàng)建一個父類為Object的宏庫岖赋,則可以被所有藍(lán)圖使用檬果。
類的成員函數(shù)可以被子類繼承,但宏不會被繼承,子類無法使用父類的宏
二选脊、邏輯區(qū)別
調(diào)用函數(shù)調(diào)用宏杭抠,而事件是觸發(fā)事件,函數(shù)和宏只要調(diào)用了恳啥,就一定會執(zhí)行過去偏灿,而事件是需要觸發(fā)條件,比如按下F鍵钝的,點擊鼠標(biāo)翁垂,都是事件。
事件專注于觸發(fā)事件的時機(jī)硝桩,只要事件觸發(fā)了沿猜,處理的邏輯和結(jié)果就和事件本身沒有關(guān)系了,比如你按下鍵盤或者點擊鼠標(biāo)是為了做什么碗脊,事件并不關(guān)心啼肩,它只要被觸發(fā)了就完成了它的使命。
而函數(shù)和宏不同衙伶,執(zhí)行到函數(shù)和宏里面的時候祈坠,一般是通過傳入一些數(shù)據(jù),最后輸出處理這些數(shù)據(jù)的結(jié)果痕支,關(guān)注的是處理的結(jié)果颁虐,從傳入?yún)?shù)到執(zhí)行邏輯返回數(shù)據(jù)整個過程都是函數(shù)體和宏內(nèi)部需要關(guān)注的,比如傳入兩個1卧须,在函數(shù)里面相加另绩,返回相加的結(jié)果是2,我需要關(guān)注傳進(jìn)去的數(shù)據(jù)是否正確花嘶,相加的過程是否正確笋籽,返回的結(jié)果是否正確,因為函數(shù)和宏返回的結(jié)果椭员,往往還要在供外部使用车海。
總結(jié):
因為事件只是觸發(fā),其執(zhí)行的先后順序我們是不得而知的隘击,在強調(diào)執(zhí)行邏輯和處理邏輯侍芝,返回的結(jié)果的時候我們應(yīng)該優(yōu)先的去使用函數(shù),因為函數(shù)的調(diào)用順序是有保證的埋同。在需要某一舉動觸發(fā)邏輯的時候應(yīng)該使用事件州叠,而宏特別適合于制作類似于if,switch這樣的控制流凶赁。引擎自帶的控制流就是用宏制作的咧栗。例如Flip Flop逆甜,A輸出和B輸出交替。