1. 程式人生 > >養成良好的程式設計習慣(Java, python)

養成良好的程式設計習慣(Java, python)

最開始用python 的時候一直覺得自己的程式碼沒有別人的好看,很容易一個迴圈語句寫的很長很長。看起來特別費勁。其原因就是一開始編寫程式碼的時候沒有很好的組織,資料結構不熟悉。常常想著“程式就跑一次,這樣應該差不多了”。最終走了不少彎路。還有很多彎路影響更大了,例如辦公室的電腦的編輯器縮排是tab,忘記改成空格了;修改程式的時候逗號不小心換成了中文字元的逗號啦。吃過的虧不少。

今天推薦兩款 輕量級的工具,從程式設計開始就養成良好的書寫習慣。就是java的程式檢查工具 checkstyle 和 python 的檢查工具 pylint。

checkstyle 可謂幫我們檢查了所有編寫規範問題,甚至連變數名大小寫的規則都會幫我們檢查。如下例子。

charlies:score92 xing$ checkstyle-algs4 Board.java 

Running checkstyle on Board.java:

Starting audit...

Board.java:6:17: The instance variable 'N' must start with a lowercase letter and use camelCase. [MemberName]

Board.java:154:13: The local variable 'N' must start with a lowercase letter and use camelCase. [LocalVariableName]

Audit done.

Checkstyle ends with 2 errors.


這裡我使用的是演算法第四版 這本書提供的checkstyle 檢查了Board.java 中可能的書寫規範問題。程式發現我變數名 N 是大寫的。我們知道JAVA預設規範中只有class的名稱才能大寫。這個檢查細緻入微,甚至可以檢查到我的空格是否使用不恰當。

對java檔案編譯後,我們還可以利用另外一個小工具 findbugs,檢查潛在的邏輯錯誤。如果程式碼通過了這兩個程式的檢查,那麼你的程式碼一定很規範了。

對於python 我們可以依靠google 的程式設計規範來編寫我們的程式碼,見這裡見這裡。 同時他們推薦了一個類似的檢查bug的問題的工具  Pylint。pylint是一個在Python原始碼中查詢bug的工具. 對於C和C++這樣的不那麼動態的(譯者注: 原文是less dynamic)語言, 這些bug通常由編譯器來捕獲. 由於Python的動態特性, 有些警告可能不對. 不過偽告警應該很少. 

使用方法也是極其方便:  pylint test.py 

相關推薦

養成良好程式設計習慣Java, python

最開始用python 的時候一直覺得自己的程式碼沒有別人的好看,很容易一個迴圈語句寫的很長很長。看起來特別費勁。其原因就是一開始編寫程式碼的時候沒有很好的組織,資料結構不熟悉。常常想著“程式就跑一次,這樣應該差不多了”。最終走了不少彎路。還有很多彎路影響更大了,例如辦公室的

一個專業的程式原該養成的好習慣分析能力《2048》遊戲分析

一、遊戲分析 《2048》是一款比較流行的數字遊戲,其作者Gabriele Cirulli (加布裡埃爾斯路理)目前居住在義大利。他在2014年3月最先將 2048 的開源版本放到 Github 上,由此引發了風靡全球的狂潮,而其當時年僅20歲。 這款遊戲的玩法很簡單,每次可以選擇上下左右移

ACM線上判題系統OJ的判題實現java+python

學院一直是有一個自己的oj的,但是由於最近判題崩了,需要修復一下,拿到判題程式碼,開啟卻是一手node.js,讓我一個搞Java的著實懵逼,因為以前學過點js,摸清判題邏輯,一步一步console.log來調bug,最後還是太複雜,把心態調崩了。最後想了了想判題就是那個流程,還是自己寫一個吧,而

養成良好程式設計習慣

·寧願名字長,也不要寫讀不懂的函式、變數名 ·每個概念對應一個名稱(controller,manager,driver,有什麼區別?) ·不要新增沒用的語境(字首) 函式 ·儘量短小,只完成一件事!!無副作用 ·函式名:動詞(引數:名詞) ·儘量減少看程式時回去讀函式宣告

【LeetCode】101. Symmetric Tree 解題報告Java & Python

目錄題目描述題目大意解題方法DFSBFS日期 [LeetCode] Total Accepted: 106639 Total Submissions: 313969 Difficulty: Easy 題目描述 Given a binary tree, ch

【練習題】第一章--程式設計之路Think Python

在這貼上電子書(感謝網上大神的分享,這本書確實不錯,在用程式開發的思想教學): https://cycleuser.gitbooks.io/think-python/content/ 1.在print語句後面的括號去掉一個或者兩個,看看會怎麼樣? 據說python2是可以這麼

程式設計字典codingdict.comJava教程

java教程 Java 教程 Java 簡介 Java 開發環境配置 Java 基礎語法 Java 物件和類 Java 基本資料型別 Java變數型

Python 實用程式設計技巧序列篇

前言 Python 作為我們平時使用頻率最高的指令碼語言擁有著靈活、簡潔、高效的特點,但是實際上大多數情況下我們都沒有能夠發揮其最大的能力,於是分幾個部分總結一下程式設計的技巧,同時也期望對Python 有一個更深的認識。 有需要Python學習資料的小夥伴嗎?小編整理【

Python 實用程式設計技巧檔案篇

一、如何讀寫文字檔案 這個問題看似簡單,但是由於py2 和 py3 的巨大差異導致我們依然要深入研究一下。 那麼 python2 和 python3 的什麼區別導致了這種差異的發生呢? 答:python2 和 python3 之間字串的語意發生了變化 有需要P

Python 實用程式設計技巧字串篇

1.如何拆分含有多種分隔符的字串 (1)我們首先考慮單一分隔符的情況: s = “10800 1 10800 10800 ? 197609 14:12:16 /usr/bin/mintty” 我們使用字串的 split()方法 s = "10800 1

Java程式設計入門1.3Java虛擬機器

機器語言由非常簡單的指令組成,計算機的CPU可以直接執行這些指令。幾乎所有的程式都是用Java、Fortran或C++這樣的高階語言編寫的。由高階語言編寫的程式不能被任何計算機直接執行。首先,必須將其翻譯成機器語言。這種翻譯由一種稱為編譯器的程式完成,編譯器將高階語言翻譯成

Python進階:函數語言程式設計例項附程式碼

上篇文章“幾個小例子告訴你, 一行Python程式碼能幹哪些事 -- 知乎專欄”中用到了一些列表解析、生成器、map、filter、lambda、zip等表達形式,這就涉及到了Python中關於函數語言程式設計(functional programming)的語法、函式等

TCP和UDP套接字程式設計 java實現

在瞭解網路程式設計之前,我們先了解一下什麼叫套接字 套接字即指同一臺主機內應用層和運輸層之間的介面 由於這個套接字是建立在網路上建立網路應用的可程式設計介面 因此也將套接字稱為應用程式和網路之間的應用程式程式設計介面!   關於TCP和UDP這裡就不作太多介紹了,我們知道TCP是面向連

多層感知機MLP演算法原理及Spark MLlib呼叫例項Scala/Java/Python

多層感知機 演算法簡介:         多層感知機是基於反向人工神經網路(feedforwardartificial neural network)。多層感知機含有多層節點,每層節點與網路的下一層節點完全連線。輸入層的節點代表輸入資料,其他層的節點通過將輸入資料與層上節點

LeetCode 7 — Reverse IntegerC++ Java Python

Have you thought about this? Here are some good questions to ask before coding. Bonus points for you if you have already thought through this! If the inte

LeetCode 2 — Add Two NumbersC++ Java Python

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes con

乾貨:Python的19個高效程式設計技巧附習題

初識Python語言,覺得python滿足了我上學時候對程式語言的所有要求。python語言的高效程式設計技巧讓我們這些大學曾經學了四年c或者c++的人,興奮的不行不行的,終於解脫了。高階語言,如果做不到這樣,還扯啥高階呢? 進群:943752371獲取Python入門你學習資料! 乾

非常經典的JAVA程式設計兔子規律

題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少? 1.程式分析: 兔子的規律為數列1,1,2,3,5,8,13,21…. /** * 兔子問題 *

二十種特徵變換方法及Spark MLlib呼叫例項Scala/Java/python

Tokenizer(分詞器) 演算法介紹:         Tokenization將文字劃分為獨立個體(通常為單詞)。下面的例子展示瞭如何把句子劃分為單詞。         RegexTokenizer基於正則表示式提供更多的劃分選項。預設情況下,引數“pattern”為

1.物件導論---java程式設計思想學習筆記

我這些學習筆記,記錄的都是我自己認為的知識點,可能以後再看的時候還要翻書,但是可以用來定位到準確的書中示例的位置,減少翻書重找的時間,利於自身知識體系的搭建。                                            self-transcende