摘要:現如今編程這個行當,也約定俗成出了一個入行儀式,就是選你將要使用的編程語言,寫段代碼輸出,這片文章講的就是這么個事寫個函數輸出,請真的不要覺得很簡單。但每行兩個字符的限制,是把函數創建的生門堵死了。
自古,三百六十行,每一行入行的時候都有個儀式。現如今編程這個行當,也約定俗成出了一個入行儀式,就是選你將要使用的編程語言,寫段代碼輸出hello world!,這片文章講的就是這么個事——寫個函數輸出hello world,請真的不要覺得很簡單。先立一個flag
軟件開發這個行業里面,有這么一句挺牛逼的話:“人生苦短,我用Python”,雖然Python我會用,也確實發自內心地覺得,在言簡意賅這條路上,它配得上這句話。但今天我就想用JavaScript向python叫叫板,比比更“短”。問題只有一個:請使用JavaScript語言編寫一個函數,返回hello world!
但是我有些個附加條件,嘿嘿嘿題目 1. 每行代碼不超過3個字符,總行數不超過9行
我先來做個示范,先拋開這條的附加條件,實現起來那就太簡單了
function f(){ return "hello world!" }
OK, 然后在控制臺用console.log(f())打印就可以看到hello world!了。
當加上這個附加條件,傳統的函數定義方式顯然行不通了。
當然現在,ES6已經相當普及,能想到箭頭函數應在情理之中。其次就是一行字符串如何寫成多行,這也應該是編程基礎,不繞彎子了,直接上代碼:
f=( )=> "h el lo w or ld !"
涉及的JavaScript知識點:箭頭函數,字符串換行
題目 2. 每行代碼不超過2個字符,總行數不超過30行每行兩個字符,你是不是連函數都不會定義了,反正箭頭函數是行不通了
總行數不超過30行,有點殘忍,算了40行也行吧
如果只出題目和貼答案,對于各位看官來說,這也只能算是奇技淫巧。所以本著閱有所得得出發點,我還是簡略剖析下我的思路,希望能給你些啟發:
在每行兩個字符的限時下,考慮到字符串換行符的存在,所要返回的hello world!字符串還是可以輸出的,只不過多些幾行的事,問題不大。
基于第一步中的方法,在不考慮總行數限制的情況下,其實什么字符串都是可以分拆成多行寫的。但每行兩個字符的限制,是把函數創建的生門堵死了。
想到JavaScript中一起皆對象,不同類型的對象都有些許內置的屬性和方法,與此同時,最精妙絕倫的是,函數的調用除了用.符號外,還可以用數組的方式,即可以在數組符號[]中,寫方法名的字符串進行方法的調用。可使用的方法,僅供參考:"".trim(),"".slice(),[].join()
如此我們便可用些內置的函數,來代替創建新函數。可想而知,在每行兩個字符的限制下,無論是箭頭函數,還是function()什么的,都顯得太過無力了。
你以為到此為止,問題就解決了么?不,你會立馬遇到另一個問題——每行兩個字符限制下,調用函數時怎么傳參?
我只能說,ES6中有個好東西——帶標簽的模板字符串
不說啥了,看代碼吧
f= "" [ " t r i m" ][ " b i n d" ]` H e l l o , w o r l d! `
涉及的JavaScript知識點:字符串換行,trim(), join(), bind(), 模板字符串
激不激動,刺不刺激。題目 3. 每行代碼不超過1個字符,總行數不超過120行
其實還不夠,我是個有時間,就想把事情做到極致的人
握緊方向盤,系好安全帶,我們繼續
有沒有世界觀快要崩塌了,是不是開始覺得,自己從來沒學過真的JavaScript。
有沒有不僅函數不會創建使用了,沒有字符串換行符,是不是連字符串都不會寫了。
好了,言歸正傳,
如果你想挑戰一下自己,那么就請先不要繼續往下閱讀,暫時移步如下你熟悉的在線編輯器,嘗試一番:
CodePen
JsBin
jsfiddle
JsRun
RunJs
CodingGround
或者直接在瀏覽器的Console中嘗試也可以。
前
方
高
能
開
始
炫
技
[ , j , , o , , i , , n , , b , , d , , s , , p , , l , , t ] = ` j o i n b d s p l t ` f = [ ] [ j + o + i + n ] [ b + i + n + d ] ( ` H e l l o , w o r l d ! ` [ s + p + l + i + t ] ` ` , [ ] + [ ] )
在問題2時,已較為詳細的分析了思路,問題3問題難度雖然加大,但思路基本不變,這里為了便于理解,僅匯總一下涉及到的知識點:
模板字符串,可以自由換行,但換行處會有一個換行符 。
解構賦值,字符串可以看成是單個字符組成的數組,由于數組的定義可以換行,通過將模板字符串解構賦值給數組,便可獲得初始化為單個字符的變量。
一些字符串和數組的內置方法:join(),splite()。
改變函數執行上下文的方法:bind(),同時可復習與apply()和call()的區別和聯系。
這或許算是一條奇技淫巧:[]+[]表示空字符""
其實我就一個想法,看過之后不要覺得這是篇講述什么奇技淫巧的文章,倘若能幫你回顧復習了些JavaScript的基礎知識,便就善莫大焉了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/95799.html
摘要:今天這篇文章主要介紹函數式編程的思想。函數式編程通過最小化變化使得代碼更易理解。在函數式編程里面,組合是一個非常非常非常重要的思想。可以看到函數式編程在開發中具有聲明模式。而函數式編程旨在盡可能的提高代碼的無狀態性和不變性。 最開始接觸函數式編程的時候是在小米工作的時候,那個時候看老大以前寫的代碼各種 compose,然后一些 ramda 的一些工具函數,看著很吃力,然后極力吐槽函數式...
摘要:而再加上后,則會打印一行清除一行,是一個系統命令,如此便產生了更酷炫的效果。完整代碼如下,大家有興趣可自行嘗試感謝大家的觀看,歡迎點贊評論,有關必回,祝大家萬事如意。 #includeint main(){ printf(Hello World!); return 0;} 想必上面這一段代...
摘要:下載,并解壓環境變量配置右鍵我的電腦屬性高級環境變量系統變量注意是下面的系統變量,不是上面的用戶變量新建變量名,變量值修改變量,在最前面加上注意是首字母大寫,不要改成,后面要有分號注意系統變量上面的用戶變量里,不要有這兩個,如果有應 1 JDK (1) 下載,并解壓 (2) 環境變量配置 右鍵我的電腦->屬性->高級->環境變量->系統變量注意:是下面的系統變量,不是上面的用戶變量...
摘要:最近在學習發現一篇文章中有錯誤,網上很多人都是直接復制粘貼那篇文章,結果每個人注釋中都是寫的正確的答案,我也是醉了,這些猿么復制粘貼代碼都不帶檢查的么,為啥都變得很浮躁了呢。 最近在學習extjs4發現一篇文章中有錯誤,網上很多人都是直接復制粘貼那篇文章,結果每個人注釋中都是寫的正確的答案,我也是醉了,這些猿么復制粘貼代碼都不帶檢查的么,為啥都變得很浮躁了呢。 現提供可以調試的代碼: ...
閱讀 1460·2021-09-02 19:23
閱讀 1609·2021-08-11 11:19
閱讀 653·2019-08-30 15:55
閱讀 1664·2019-08-30 12:50
閱讀 2254·2019-08-30 11:23
閱讀 2193·2019-08-29 13:13
閱讀 1512·2019-08-28 18:13
閱讀 3353·2019-08-26 11:53