国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

你的編程語言可以這樣做嗎?

2024-09-06 12:44:58
字體:
供稿:網(wǎng)友
有一天,你在瀏覽自己的代碼,發(fā)現(xiàn)有兩大段代碼幾乎一樣。實際上,它們確實是一樣的——除了一個關(guān)于意大利面(Spaghetti)而另一個關(guān)于巧克力慕思(Chocolate Moose)。 

  // 一個小例子:

  alert("偶要吃意大利面!");
  alert("偶要吃巧克力慕思!");
嗯,這個例子碰巧是用javascript寫的,不過你就算不懂JavaScript,應(yīng)該也能明白它在干什么。 

拷貝代碼不好。于是,你創(chuàng)建了個函數(shù) 

  function SwedishChef( food ){
      alert("偶要吃" + food + "!");
  }
  SwedishChef("意大利面");
  SwedishChef("巧克力慕思");
Ok,這只是一個很小很小的例子而已,相信你能想像到個更實際一點的例子。這段代碼有很多優(yōu)點,你全都聽過幾萬次了:可維護性、可讀性、抽象性 = 好! 

現(xiàn)在你留意到有另外兩段代碼幾乎跟它們一模一樣,除了一個反復(fù)調(diào)用一個叫BoomBoom的函數(shù),另一個反復(fù)調(diào)用一個叫PutInPot的。除此之外,這兩段代碼簡直沒什么兩樣: 

  alert("拿龍蝦");
  PutInPot("龍蝦");
  PutInPot("水");
  alert("拿雞肉");
  BoomBoom("雞肉");
  BoomBoom("椰子醬");
現(xiàn)在要想個辦法,使得你可以將一個函數(shù)用作另一個函數(shù)的參數(shù)。這是個重要的能力,因為你更容易將框架代碼寫成一個函數(shù)(emu注:還記得template method模式吧?)。 

  function Cook( i1, i2, f ){
      alert("拿" + i1);
      f(i1);
      f(i2);
  }
  Cook( "龍蝦", "水", PutInPot );
  Cook( "雞肉", "椰子醬", BoomBoom );
看看,我們居然把函數(shù)當(dāng)成調(diào)用參數(shù)傳遞了! 

你的編程語言能辦到嗎? 

等等……假如我們已經(jīng)有了PutInPot和BoomBoom這些函數(shù)的具體實現(xiàn)代碼(而且又不需要在別的地方重用它們),那么用內(nèi)聯(lián)語法把它們寫進函數(shù)調(diào)用里面不是比顯式的聲明這兩個函數(shù)更漂亮嗎? 

  Cook( "龍蝦", 
        "水", 
        function(x) { alert("pot " + x); }  );
  Cook( "雞肉", 
        "椰子醬", 
        function(x) { alert("boom " + x); } );
耶,真方便!請注意我只是隨手創(chuàng)建了個函數(shù),甚至不用考慮怎么為它起名,只要拎著它的耳朵把它往一個函數(shù)里頭一丟就可以了。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 会理县| 娱乐| 许昌市| 乌鲁木齐县| 特克斯县| 虎林市| 汶上县| 双辽市| 东山县| 东乌| 横山县| 伊川县| 毕节市| 新河县| 兴安盟| 宜兴市| 南丹县| 万宁市| 峡江县| 甘泉县| 黄龙县| 如皋市| 阿拉尔市| 陇川县| 泰宁县| 广南县| 海伦市| 梧州市| 辽源市| 武平县| 射阳县| 扬中市| 泗阳县| 青冈县| 基隆市| 银川市| 耒阳市| 根河市| 宜州市| 班戈县| 岗巴县|