<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          垃圾代碼書(shū)寫(xiě)準(zhǔn)則(有意思)

          共 2080字,需瀏覽 5分鐘

           ·

          2020-11-03 17:26

          周日先嘮嘮嗑。早上起來(lái)刷朋友圈,發(fā)現(xiàn)小伙伴們都在說(shuō) S10 的事,忍不住思緒就飄了起來(lái)。我以前只玩單機(jī)游戲,因?yàn)?。。。。。。難度低,看到這個(gè)原因小伙伴們是不是要感動(dòng)地落淚了。

          到蘇州參加工作后,被宿友們帶著玩了幾把 DOTA,就徹底愛(ài)上了。一開(kāi)始虐 AI,后來(lái)到對(duì)戰(zhàn)平臺(tái)上,叫什么名字竟然一時(shí)間忘記了。最高積分也就一千多來(lái)著吧,太菜了。

          但是,不甘心啊。為了提升技戰(zhàn)術(shù)水平,看了很多職業(yè)大神們的視頻教學(xué),比如說(shuō)大酒神的“從零單排”,以及職業(yè)比賽的錄像解說(shuō),最喜歡的戰(zhàn)隊(duì)是 LGD(老干爹),最喜歡的選手 ZSMJ(蛛絲馬跡,或者叫左手摸即)。

          再后來(lái),DOTA2 出來(lái)了,界面和之前的 DOTA1 完全不同,就好像 Windows 7 和 Windows XP 吧。由于大局觀、手操能力、天賦(零)等等各方面的原因,完全玩不了。

          游戲玩得不 6,有時(shí)候也蠻叫人傷心的。

          再后來(lái),同學(xué)推薦我玩 LOL(英雄聯(lián)盟),說(shuō)操作性要求沒(méi)那么高,我試玩了幾把,確實(shí)還不錯(cuò),最喜歡的一個(gè)英雄叫“暗夜獵手-薇恩”,射箭的,感覺(jué)動(dòng)作很瀟灑,身材也不錯(cuò)。

          不過(guò),終究是年紀(jì)大了(再次哭泣),本身在玩游戲上就零天賦,玩起來(lái)很吃力,經(jīng)常被虐,虐到心塞,就漸漸地不玩了。

          雖然不玩了,但經(jīng)常關(guān)注 DOTA2 和 LOL 方面的消息。說(shuō)句實(shí)在話,國(guó)內(nèi)電競(jìng)選手的水平真的很優(yōu)秀,出類(lèi)拔萃的很多,但俱樂(lè)部經(jīng)常有一些騷操作,就導(dǎo)致戰(zhàn)隊(duì)在國(guó)際賽事上的成績(jī)一直不是很穩(wěn)定。

          作為一名心系電競(jìng)的老(菜) DOTAER,期待明年的 S11 吧。

          嗑嘮完了,給小伙伴們推薦一個(gè)非常有意思的 GitHub 項(xiàng)目:

          https://github.com/trekhleb/state-of-the-art-shitcode

          名叫“垃圾代碼書(shū)寫(xiě)準(zhǔn)則”,瞧這名字,我真的是服了。作者也是良苦用心,從反面教材的角度來(lái)闡述正確書(shū)寫(xiě)代碼格式的重要性。

          作者使用 JavaScript 編寫(xiě)的代碼示例,我把它重制成了 Java 版,并且用我自己的語(yǔ)言風(fēng)格翻譯成了中文,希望小伙伴們能夠喜歡。

          ? 以一種容易造成代碼混淆的方式命名變量

          命名越短,就需要越多的時(shí)間去思考代碼邏輯等問(wèn)題。

          Good ??

          int?a?=?42;

          Bad ??

          int?age?=?42;

          ? 變量/方法命名風(fēng)格不統(tǒng)一

          為風(fēng)格不統(tǒng)一干杯。

          Good ??

          int?wWidth?=?640;
          int?w_height?=?480;

          Bad ??

          int?windowWidth?=?640;
          int?windowHeight?=?480;

          ? 不寫(xiě)注釋

          反正沒(méi)人能讀懂你的代碼。

          Good ??

          int?cdr?=?700;

          Bad ??

          注釋?xiě)?yīng)該包含一些“為什么”,而不是一些“是什么”。如果代碼連是“什么”都表達(dá)不清楚,那代碼也太爛了。

          // 700ms 的數(shù)量是從 UX A/B 測(cè)試結(jié)果中得到的一個(gè)經(jīng)驗(yàn)值。
          //?@查看:?<詳細(xì)解釋?700?的一個(gè)鏈接>
          int?callbackDebounceRate?=?700;

          ? 使用母語(yǔ)寫(xiě)注釋

          如果你的母語(yǔ)是英語(yǔ),那么請(qǐng)忽略這條準(zhǔn)則。

          Good ??

          //?Закрива?мо?модальне?в?конечко?при?виникненн??помилки.
          toggleModal(false);

          Bad ??

          //?隱藏錯(cuò)誤彈窗
          toggleModal(false);

          PS:如果英語(yǔ)書(shū)寫(xiě)能力不是很強(qiáng)的話,建議還是用母語(yǔ)吧。畢竟說(shuō)清楚總比說(shuō)不清楚要強(qiáng)。

          ? 聲明變量的風(fēng)格不統(tǒng)一

          再次為風(fēng)格不統(tǒng)一干杯。

          Good ??

          String?[]?i1?=?{"沉",?"默",?"王",?"二"};
          String?i2?[]?=?{"沉",?"默",?"王",?"三"};

          Bad ??

          String?[]?wanger?=?{"沉",?"默",?"王",?"二"};
          String?wangsan?[]?=?{"沉",?"默",?"王",?"三"};

          ? 盡可能把代碼寫(xiě)成一行

          Good ??

          IntStream.range(1,?5).boxed().map(i?->?{?System.out.print("Happy?Birthday?");?if?(i?==?3)?return?"dear?NAME";?else?return?"to?You";?}).forEach(System.out::println);

          Bad ??

          for?(int?i?=?1;?i?5;?i++)?{
          ????System.out.println("Happy?Birthday?"?+?(i?==?3???"dear?NAME"?:?"to?you"));
          }

          ? 對(duì)錯(cuò)誤信息不管不顧

          無(wú)論什么時(shí)候發(fā)現(xiàn)錯(cuò)誤,都沒(méi)有必要讓其他人知道。

          Good ??

          try?{
          ??//?意料之外的情況。
          }?catch?(error)?{
          ??//?tss...??
          }

          Bad ??

          try?{
          ??//?意料之外的情況。
          }?catch?(error)?{
          ??//?and/or
          ??logError(error);
          }

          ? 使用大量的全局變量

          全球化的原則。

          Good ??

          int?x?=?5;

          void?multi()?{
          ??x?=?x?*?2;
          }

          multi();?//?現(xiàn)在?x?是?10

          Bad ??

          int?x?=?5;

          int?multi(int?num)?{
          ??return?num?*?2;
          }

          x?=?multi(x);?//?現(xiàn)在?x?是?10

          ? 聲明根本不會(huì)使用的變量

          萬(wàn)一以后用了呢?以備不時(shí)之需。

          Good ??

          int?sum(int?a,?int?b,?int?c)?{
          ??int?timeout?=?1300;
          ??int?result?=?a?+?b;
          ??return?a?+?b;
          }

          Bad ??

          int?sum(int?a,?int?b)?{
          ??return?a?+?b;
          }

          ? 如果條件允許的話,從不指定類(lèi)型。

          Good ??

          //?享受便捷的快樂(lè)
          List?list?=?new?ArrayList();
          list.add("沉默王二");
          list.add(18);

          Bad ??

          List?nameList?=?new?ArrayList();

          //?編譯出錯(cuò)
          nameList.add(18);

          ? 沒(méi)鳥(niǎo)用的代碼

          看起來(lái)更嚴(yán)謹(jǐn),其實(shí)很多余。

          Good ??

          Integer?multi(Object?num)?{
          ????if?(!(num?instanceof?Integer))?{
          ????????return?null;
          ????}?else?if?(num?!=?null)?{
          ????????return?(Integer)?num?*?2;
          ????}
          ????return?null;
          }

          Bad ??

          Integer?multi(Object?num)?{
          ????if?(num?instanceof?Integer)?{
          ????????return?(Integer)?num?*?2;
          ????}
          ????return?null;
          }

          ? 大量的 if-else 嵌套

          Good ??

          void?someMethod(int?a,?int?b,?int?c)?{
          ????if?(a?>?0)?{
          ????????if?(b?>?0)?{
          ????????????if?(c?>?0)?{
          ???????????????int?result?=?a?/?b?/?c;
          ????????????}
          ????????}
          ????}
          }

          Bad ??

          void?someMethod1(int?a,?int?b,?int?c)?{
          ????if?(a?0?||?b?0?||?c?0)?{
          ????????return;
          ????}
          ????int?result?=?a?/?b?/?c;
          }

          ? 參差不齊地縮進(jìn)

          參差不齊乃幸福本源。

          Good ??

          String?[]?wanger?=?{"沉",?
          ????????"默",?"王",?"二"};
          String?[]?wangsan?=?{"沉",?"默",?"王",?"三"};
          Arrays.asList(wanger).stream().
          ????????forEach(System.out::println);
          Arrays.asList(wangsan).
          ????????stream().
          ????????????????forEach(System.out::println);

          Bad ??

          String?[]?wanger?=?{"沉",?"默",?"王",?"二"};
          String?[]?wangsan?=?{"沉",?"默",?"王",?"三"};
          Arrays.asList(wanger)
          ????????.stream()
          ????????.forEach(System.out::println);
          Arrays.asList(wangsan)
          ????????.stream()
          ????????.forEach(System.out::println);

          ? 代碼行數(shù)多的方法的比少的好

          不要把代碼邏輯分成可讀的部分。

          • 一個(gè)類(lèi)中的代碼行數(shù)超過(guò) 10000 行。

          • 一個(gè)方法中的代碼行數(shù)超過(guò) 1000 行。

          • 一個(gè)方法里既做減法處理又做加法處理,還做乘除的處理。

          ? 不要測(cè)試你的代碼

          代碼測(cè)試是測(cè)試工程師的事,關(guān)我屁事。

          ? 避免代碼風(fēng)格統(tǒng)一

          隨心所欲地編寫(xiě)代碼,特別是在一個(gè)團(tuán)隊(duì)中有多個(gè)開(kāi)發(fā)人員的情況下,我崇尚“自由”。

          ? 不要寫(xiě)文檔

          從一開(kāi)始就不要。

          ? 不要?jiǎng)h除廢棄掉的代碼

          代碼盡管已經(jīng)廢棄了,注釋掉就行了,沒(méi)必要?jiǎng)h掉。

          好了,小伙伴們還有需要補(bǔ)充的嗎?

          喜歡逛 GitHub 的小伙伴可以點(diǎn)擊下面的地址跳轉(zhuǎn)過(guò)去查看,我已經(jīng)提交了:

          https://github.com/itwanger/state-of-the-art-shitcode/blob/master/README.zh-CN.md

          另外再推薦一個(gè)項(xiàng)目,里面包含了 Java 程序員常讀的書(shū)單,幫你構(gòu)建最強(qiáng)知識(shí)體系。但不限于 Java,包括設(shè)計(jì)模式、計(jì)算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)與算法、大數(shù)據(jù)、架構(gòu)、管理等等。

          https://github.com/itwanger/JavaBooks

          小伙伴也可以去 star 下。周末愉快,記得點(diǎn)贊,重拾我們的傳統(tǒng)美德!

          瀏覽 32
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本成人片在线免费观看 | 天天做天天爱天天综合 | 成人大香蕉网站精品免费 | 操操操操操操操操操操操操操逼 | 日韩黄色无码 |