1. 程式人生 > >關於什麼時候用assert(斷言)的思考

關於什麼時候用assert(斷言)的思考

      在公司一個同事問我:"什麼時候應該用assert?比如某個函式的輸入引數為一個指標,要進行有效計算,該指標必須非空,我彈出一個警告對話方塊來提示對方不就行了嗎?幹嗎要用assert?我想問的是什麼時候用對話方塊提示使用者,什麼時候用assert?"

      這是一個值得思考的問題。首先明確assert(這裡我說的是C++環境下)是需要在除錯狀態下才能生效的,在釋出版是失效的。除錯生效的事實告訴我們的是assert的一個重要作用是幫助開發者除錯程式定位錯誤的。作為開發者一個普遍事實是解決bug並不難,定位bug往往是最難的。這也是我倡導多使用assert的原因所在。再深想一層,我們作一個假想:假如assert在釋出版上也能用,那麼什麼時候用assert,什麼時候用提示對話方塊,原則是什麼?我認為這裡有一個使用者層次的問題。程式其實一般有兩類使用者:未釋出前的開發者和釋出後的使用者。作為開發者,我們假定他是懂斷言的,但對於使用者,我們卻不能假定他懂斷言。如果這個介面是面對開發者的,那麼就應該用斷言來限制輸入引數;如果是面向使用者的,那麼就應用提示對話方塊,比如彈出一個對話方塊選擇讓使用者選擇一個輸入檔案,但使用者還沒選擇檔案就按"確定"按鈕,這應該用對話方塊就是提示,而不應該斷言(這裡如果彈出斷言對話方塊,他還不知道是怎麼回事呢)。