突然看到好幾篇文章,內容基本上是什麽用Java需要100行,用PHP只需要30行,用Python只需要10行(數字記不清了)。簡單說一下我的看法。
我不服,憑啥都是編程語言,你行我就不行?
我記不清當時給出的支持Python可以少寫代碼的栗子具體是什麽了,它給出的是實現了某個功能,兩行搞定,一行引入,一行調用。
當時看的我一臉懵逼,哇,真的耶。只用一行就可以。但稍後一想,這也太扯了吧。你看著貌似是只調用了一行代碼,但裏邊具體的實現不還是有的麽?代碼量並沒有減少,只不過是搬到了你看不到的地方,假象罷了。
當然,我是支持用Python可以少寫代碼的,但並不是剛才說的那樣。
在我看來,這個問題得從語法層面來說,只有語法支持,才算真的能夠減少代碼量。其實各個語言都有其特定的語法。就像PHP中變量直接當函數用,直接當類用,連反射都不用了。
舉個栗子就是大家都熟悉的lambda。現在有一個需求,要接收外部穿進來的函數。給出不同語言的實現
Java版本
// 因爲Java中一切都是對象,所以盡管提供了lambda的支持,但並不能直接調用函數,而是以接口的形式調用
interface MathTest {
int add(int a, int b);
}
// 接收lambda的函數
void dispose(MathTest mt){
int v = mt.add(1, 3);
}
// 調用函數的地方
dispose((x, y) -> x + y)
因爲Java一切皆是對象,lambda其實就是一個匿名內部類。
PHP版本
// 接收函數
function dispose($fun){
$v = $fun(1, 3);
}
// 調用的地方
dispose(function($a, $b){
return $a + $b;
});
PHP可以直接傳函數,已經很方便的,但是不支持lambda,還是需要正兒八經的寫個函數傳過去。
Python版本
def dispose(fun):
v = fun(1, 3)
dispose(lambda x, y: x+y)
Python既可以直接傳函數,又支持lambda表達式。
當然,還有一些其他的語法,是可以稍稍體現一哈Python的獨到之處的。嘿嘿
簡單羅列了一些Python的語法支持,確實是不用寫過多代碼就能實現相關功能。
元素交換
a,b = b,a
實現兩個元素值的交換,無需臨時變量。
數組生成
list = [x for x in range(20) if x%2 == 0]
生成偶數列表,這個一行搞定,舒服。
列表切片
list[1:4]
對列表的各種切片操作。
其實,Python最大的特點就是,他沒有大括號。剛開始從Java到Python時,看著沒有大括號的程序,很順眼。但現在用了一段時間的PHP,又突然感覺沒有大括號有點別扭。哼,男人。