法律是很講求邏輯的一件事,寫程式也是。法律語言和程式語言一樣,有獨特的理解方式,撰寫方法和語意。
沒有經過法律訓練的人看法律文字,常常會每個字都看得懂但連在一起就看不懂,或是連在一起看得懂但甚麼意思看不懂。
程式語言也是一樣,沒學過程式語言的人,程式語言看起來就是一片亂碼。
但其實把程式語言翻譯成法律文字之後,其實邏輯上的操作有共通的地方。
本文用一個簡單的法律例子來呈現程式語言的邏輯概念
第 2 條 |
公法上之爭議,除法律別有規定外,得依本法提起行政訴訟。 |
我們試著用程式語言操作這個條文:
程式語言的種類很多,各自有各自的呈現方式’,就像法律可以用中文、英文、德文來寫一樣,為了更簡單的呈現出來,本文使用虛擬程式碼(pseudo code)來呈現。
首先,本條其實代表的意思是這樣:如果是公法上爭議,法律又沒有別有規定,則遵循行政訴訟法。
基本上就是個若 A 則 B 的概念。
但我們需要語言上簡單一點,因為越複雜的語言越容易出錯,機器判讀上也會花掉更多時間。所以盡量避免使用雙重否定的語意。
所以把他修改成這樣:
不過這樣好像感覺不太出來階層
再進一步修改成這樣
這樣有點兩層過濾的感覺,第一行先過濾到剩下所有公法爭議。
第二行濾掉其他法律有規定的部分。
剩下的案件就遵循行政訴訟法。
最後一行的 endif 就相當於句點。是用來告訴電腦,我這一段語意從 if 開始,在 endif 結束。
但是「案件屬於公法事件」這件東西電腦並不知道怎麼判斷,所以我們要另外教導電腦甚麼是案件屬於公法事件。
所以我們在剛才那些判斷式的上面增加了一個 function,用來定義甚麼是「案件屬於公法事件」。
function 的目的是,當電腦第一次讀到 fuction 的部分,會先記起來繼續往下讀,但不會有作用,接著讀到「if 案件屬於公法爭議」的時候,因為電腦看不懂「案件屬於公法爭議」,就會去記憶裡面尋找剛才有沒看過一樣的東西。
發現剛才有記住有個 function 是在定義甚麼叫做「案件屬於公法爭議」,所以就會把剛才的 fucntion 呼叫出來操作在這個「if 案件屬於公法爭議」的程序中。
function 案件屬於公法爭議 {
if (案件涉及國家權力行使 or 當事人之一主體為國家 or
公益目的 or 規範上下隸屬關係)
return true
else
return false
endif
}
這邊用了四種學說就不要吐槽了,中括號裡面的部分就是用來操作案件屬於公法爭議,符合任一種學說見解,就會吐出一個「true」的值,代表檢測的通過了 function 的檢驗標準。如果沒有通過,就會吐出一個「false」的值,代表沒有通過檢測。
通過檢測後,就代表案件屬於公法爭議,接下來就是判斷其他法律有沒有規定。
這樣的邏輯性其實和法律判斷有異曲同工之妙,只是一種是用法律語言表達,一種是用程式語言表達,一個是用來操作法律,一個是用來操作電腦,但回朔到本質上,都是以邏輯為出發點。
所以也許法律念得好,寫程式說不定也可以很得心應手 der~~~
感謝Barry律師的貢獻。今天發現你的blog很讚,以後會定期造訪。
謝謝Teddy
有什麼建議也都可以和我說~~