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

2021-09-10 02:05:01 字數 1203 閱讀 8470

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

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

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!

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

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

什麼時候用assert?

assertion 斷言 是軟體測試的一種除錯方式,很多開發語言都支援這種機制。在實現中,assertion在程式中就是一條語句,assertion對boolean表示式進行檢查,乙個正確程式中的boolean表示式的值是true的,如果值為false,那麼,該程式已經處於不正確的情況下了,系統將給...

Java 什麼時候用 assert

assertion 斷言 在軟體開發中是一種常用的除錯方式,很多開發語言中都支援這種機制。在實現中,assertion就是在程式中的一條語句,它對乙個boolean表示式進行檢查,乙個正確程式必須保證這個boolean表示式的值為true 如果該值為false,說明程式已經處於不正確的狀態下,ass...

什麼時候用exists 什麼時候用in

in not in exists not exists 使用exists,oracle會首先檢查主查詢,然後執行子查詢直到它找到第乙個匹配項,這就節省了時間。oracle在執行in子查詢時,首先執行 子查詢,並將獲得的結果列表存放在乙個加了索引的臨時表中。在執行子查詢之前,系統先將主查詢掛起 待子查...