如果我能做魔法,我會想出一個C#代碼分析工具;我們稱之爲XYZ
。下面是一些代碼的例子,你可以輸入給XYZ
:分析面向對象代碼的想法
public class MyClass
{
private int myInt;
[Functional]
public int GetDoubleOfMyInt()
{
return 2*myInt;
}
[SideEffect: myInt]
public void IncrementMyInt()
{
myInt++;
}
}
通知,這兩種方法的標籤。 XYZ
將驗證GetDoubleOfMyInt()
確實是純粹的功能(就其僅計算整數而言),並且IncrementMyInt
具有將值分配給myInt
的副作用。如果換了兩個標籤XYZ
會發出兩個錯誤。
我的問題: 1.是否確實存在一些倒鉤XYZ
? 2.如果你被要求實施它,你會從哪裏開始?
您是否聽說過[代碼合同](http://msdn.microsoft.com/zh-cn/devlabs/dd491992)? –
'Functional'不是特別描述性的。考慮「純」或「無副作用」之類的東西。還要注意的是,有一些數據結構對外部是純粹的功能,但是在引擎蓋下大量使用可變性 - 這些*的正確性會更有用,但也更難。 – delnan
發表評論是因爲它不是一個真正的答案,但如果你有時間和傾向,你可以看看Ada是如何工作的,也許會吸取一些啓發;它將過程(可能會修改它們的輸入)與函數(可能不會)分開,並且有幾個編譯器編譯指示,如Pure pragma,表示代碼沒有副作用。 – Uffe