1. 程式人生 > 其它 >使用思維導圖,優雅的完成自己的程式碼

使用思維導圖,優雅的完成自己的程式碼

(點選上方 程式設計師寶庫,可快速關注)

作者:九死蠶傳人bo https://segmentfault.com/a/1190000012435669

我自己常常在寫程式碼的時候,會突然搞不清變數用來幹嘛的,也會被理不清的邏輯搞得自己異常煩躁,我甚至常常暗示自己我不適合寫程式碼,思維總是那麼不清晰。直到我發現了思維導圖的妙用。

最開始使用思維導圖的時候,我其實是用來記知識點的。然而某一刻就靈光一閃了,嘗試使用了思維導圖來記錄程式碼變數和邏輯,最後居然就輕鬆的把以為要理很久的問題搞定了。為了驗證自己的想法,我又嘗試自己寫了一些小東西,對於我們這些初學者,肯定是選項卡和分頁什麼的最常用了,因為裡面有一些變數總是那麼令人難以捉摸,這裡我以分頁為例,向大家分享我是如何用腦圖完成分頁的。

這裡省去使用ajax獲取後臺資料的部分,我自己建立一個js檔案,裡面用JSON存了一點資料。一般來說使用ajax都是一頁一頁的獲取資料,我這裡直接將所有資料都顯示出來。

首先,根據多方瞭解,翻閱資料,找到了一種實現分頁的方式,大概就是用一些變數來控制,比如當前頁,總頁數,還有第幾頁的按鈕等等,然後再寫一個比如showPage()來顯示當前頁的內容,通過變數的改變來控制showPage()的顯示。

  • 首先用css畫一個大概樣式圖
  • 然後自行腦補一下想要實現的功能
  • 理清變數和功能方法
  • 然後我們以showBtn()為例,思考如何完成這個函式。

我們預設每一個button頁有5個按鈕,為了防止最後一頁不夠5個,因此先隱藏所有的按鈕,然後通過迴圈將存在的按鈕顯示出來

於是我就可以完成showButton函式如下

function showButton() {
 var
 $numb = $('.numb'),
 min = (btn_cur-1)*5 + 1,
 max = 0;
 
 if (btn_cur == btn_acount) {
 max = page_acount + 1;
 } else if (btn_cur < btn_acount) {
 max = (btn_cur*5) + 1;
 };
 
 $numb.hide();
 
 for(var i=min; i<max; i++) {
         !function() {
 $numb.eq(i%5 - 1).show();
 $numb.eq(i%5 - 1).attr('data-list', i);
 $numb.eq(i%5 - 1).html(i);
 }();
 }
}

當我沒有使用腦圖寫出來的程式碼是這樣的 – -!,完全沒邏輯可言有木有

function showButton() {
 var $numb = $('.numb');
 if (btn_acount == 1) {
 $numb.hide();
 $('.more').hide();
 $('.last').hide();
 for(var i=0; i<acountPage; i++) {
 $numb.eq(i).show();
 $numb.eq(i).attr('data-list', i);
 }
 };
 
 var min = (btn_cur-1)*5 + 1;
 var max = 0;
 if (btn_cur == btn_acount) {
 max = page_acount+1;
 } else if (btn_cur < btn_acount) {
 max = btn_cur*5+1;
 };
 
 $numb.hide();
 
 for( var i=min; i<max; i++ ) {
 $numb.eq(i%5 - 1).show();
 $numb.eq(i%5 - 1).attr('data-list', i);
 $numb.eq(i%5 - 1).html(i);
 }
}
  • 在來一輪邏輯整理,當函式都寫好,變數都整明白了,就可以新增事件了,先來一輪思維整理。

於是按照這個思路,輕鬆完成事件新增,程式碼如下

$('.pos_page').on('click', function(e) {
 // e.preventDefault();
 var $target = $(e.target);
 var className = $target.attr('class').split(' ')[0];
 
 $target.on('selectstart', function() {
 return false;
 });
 
 switch(className) {
 case 'prev_page':
 if (index!=0) {
 index -= 1;
 page_cur -= 1;
 } else if (index == 0) {
 if (btn_cur > 1 ) {
 index = 4;
 btn_cur -= 1;
 page_cur -= 1;
 } else if (btn_cur == 1) {
 return;
 }
 };
 showPage(page_cur, page_every);
 showButton();
 setFocus();
 break;
 case 'next_page':
 if (btn_cur == btn_acount) {
 if (index == page_acount%5 - 1) {
 return;
 } else if( index < page_acount%5 - 1) {
 index ++;
 page_cur ++;
 }
 } else if (btn_cur < btn_acount) {
 if (index == 4) {
 index = 0;
 btn_cur += 1;
 page_cur += 1;
 } else if (index < 4) {
 index ++;
 page_cur++;
 };
 };
 showPage(page_cur, page_every);
 showButton();
 setFocus();
 break;
 case 'numb':
 page_cur = $target.attr('data-list');
 index = page_cur%5-1;
 console.log(page_cur);
 showPage(page_cur, page_every);
 showButton();
 setFocus();
 break;
 case 'more':
 if (btn_cur < btn_acount) {
 btn_cur += 1;
 index = 0;
 showButton();
 setFocus();
 
 page_cur = $('.numb').eq(0).html();
 showPage(page_cur, page_every);
 };
 break;
 case 'last':
 if (btn_cur != btn_acount) {
 btn_cur = btn_acount;
 index = 0;
 page_cur = (btn_cur - 1)*5 +1;
 showPage(page_cur, page_every);
 showButton();
 setFocus();
 };
 default:
 break;
 }
});

主要是通過類名來區分目標DOM,通過自定義data-list屬性來標識當前頁

總的來說,與我而言,通過思維導圖,是寫出思維嚴密,易於維護的程式碼的有效途徑,看上去浪費了時間,其實增加了非常多的效率。

覺得本文對你有幫助?請分享給更多人。