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