assert函數廣泛在java、Python、PHP、C語言中存在,都有統一的意義,用業界語言稱之為"斷言"。最初的出發點都是為了方便調試而設計的,但是最近越來越多的開發者不分測試環境和正式環境濫用assert函數,引發了我對廣大程式設計師朋友的擔憂,故寫此篇文章普及assert函數常識,避免各位朋友濫用assert函數。
簡單的概況在各個語言中assert函數的意義:如果表達式的值為假,整個程序將退出,並輸出一條錯誤信息。如果表達式的值為真則繼續執行後面的語句。

assert函數 Java中,斷言關鍵字是從JAVA SE 1.4引入的。為了避免在舊版本的Java代碼中使用assert關鍵字導致的錯誤,Java在執行時默認不啟動斷言檢查(此時,所有斷言語句都將被忽略!),如果您想打開斷言檢查,您需要使用switch-enable斷言或-ea來打開它。
在C中,assert的作用是先計算表達式 expression ,如果其值為假(即為0),那麼它先向stderr列印一條出錯信息,然後通過調用 abort 來終止程序運行

Python中斷言函數作用:斷言函數是對表達式布爾值的判斷,要求表達式計算值必須為真。可用於自動調試。
如果表達式為假,觸發異常;如果表達式為真,不執行任何操作。
斷言函數形式:
assert(condition)
if not condition:
raise AssertionError()
PHP中assert這個函數在php語言中是用來判斷一個表達式是否成立。返回true or false;例如
<?php
$s = 123;
assert("is_int($s)");
?>
從這個例子可以看到字符串參數會被執行,這跟eval()類似。不過eval($code_str)只是執行符合php編碼規範的$code_str。
已放棄使用assert()的原因是,頻繁的調用會極大的影響程序的性能,增加額外的開銷。在調試結束後,應當禁用assert調用。
Assert用於避免明顯的錯誤,而不是處理異常。錯誤和異常是不同的。錯誤不應該發生,例外是不可避免的。c語言異常可以通過條件判斷來處理。其他語言有自己的異常處理機制。
使用assert的一個非常簡單的規則是在方法或函數的開頭使用它。如果你在一個方法中使用它,你需要仔細考慮它是否合適。在該方法開始時,功能過程還沒有開始,並且在功能過程執行期間發生的幾乎所有問題都是直接拋異常的。
為assert是用於調試測試程序的,並且不用於正式的生產環境,所以應該考慮用一個更好的測試JUint來代替它。JUint提供了比assert鍵更多的功能。當然,調試和測試可以通過集成開發環境調試來進行。
因此,應該避免在各種語言中使用assert函數,除非某一天assert函數變得無比的強大,不再區分測試環境和正式環境的切換,此時可以考慮這一點。比較一下斷言能給你帶來多少好處和麻煩。這是我們選擇是否使用它的原則。
好了,先生們女士們,此次關於assert函數就分享到這裡!