2012-07-11 85 views
5

我正在學習電梯。當我讀到有關模板,我明白,他們有很多的事情不是在編譯時typechecked:電梯和類型安全

  • 模板可能包含
  • SiteMaps的可能是指
  • 不存在的頁面不存在的片段引用
  • 片段調度方法採取字符串參數,我們可以很容易地發現錯字

是否有替代品,使這個問題不太嚴重,即外部代碼檢查或選擇在圖書館,這將允許做相同的,但在類型安全的方式?或者可能存在另一個更嚴格的網絡框架(可能是其他語言)。

+0

我相信對於大多數這樣的情況,編寫基於正則表達式的驗證器可能很容易。但是,雖然沒有這樣的事情,你可以嘗試測試你的代碼 - 正確的測試應該能夠捕獲所有這些錯誤。 – Rogach 2012-07-11 14:37:19

回答

1

類型檢查是強類型語言(如Scala或Java)的編譯時功能,允許驗證簽名和類型之間的關係。當期望一個類型爲Meat的參數或者將一個String賦值給一個Int類型的變量時,這些檢查將阻止您傳遞一個類型爲Banana的參數。通常,在動態語言(如Ruby或Javascript)中,這是不可能的

你在找什麼不是一個類型檢查器。你不想驗證你的程序在語法上是正確的,而是說它的行爲是正確的,並且解決方案稱爲自動化測試。

你完全可以寫代碼在語法上是正確的,但行爲錯誤:

public boolean isTrue(boolean value){ 
     return !value; 
} 

如果你認爲它周圍的其他方式,你會如何測試一個編譯時模板的正確性,其需要填寫一些數據?

<!-- importing a snippet depending on the value of a variable --> 
<import src="${snippetName}.xml"/> 

你不能,因爲編譯時你所有的變量都沒有任何價值。這就是爲什麼自動化測試非常重要,編寫測試用例爲您的應用程序不能被編譯時檢查替代。

+2

對我來說,類型檢查是關於在編譯時發現錯誤的。理論上可以檢查許多未經升降檢查的東西。 – 2012-07-11 14:31:32

+0

Typechecking在這裏描述:http://en.wikipedia.org/wiki/Type_system。您所指的是靜態代碼分析,正如您所說的那樣,它可能會將某些運行時錯誤轉化爲編譯時錯誤。然而,編寫一個靜態代碼分析器並不難,嘗試一下... – Edmondo1984 2012-07-11 14:36:45

+2

類型檢查是一種輕量級的靜態分析形式。康斯坦丁想要的是非常可行的。 – 2012-07-11 22:53:55