2013-12-10 48 views
1

在我的語言編程課程考試中有這個問題:命令式編程範例是否必須符合前向聲明規則?

下一個程序是否在命令式編程中有效?

int a = 0; 
    z = a + 2; 
    int z = 3; 

未被指定或語法,語法或任何額外的東西。我的回答是YES,因爲最終可能會有語言,語法和語法設計,因爲這些語言是有效的,並且沒有聲明它,並在以後重新聲明。我的成績是0.0,但我仍然覺得不公平。可以幫助澄清這個問題?謝謝。

+1

有許多命令式語言;其中一些不需要明確的聲明和其他聲明(我確信還有很多方面需要考慮)。但是,請記住在課程材料中回答* - 即使在說「是」時也是如此。揮手(「最終可能會出現」)並不是一個足夠強的理由,也不能證明課程的概念。 – user2864740

回答

1

你被標記爲不公平。

下面的代碼片段粘貼到瀏覽器的調試器控制檯:

(function() { 
    var a = 0; 
    z = a + 2; 
    alert(z); 
    var z = 3; 
    alert(z); 
})() 
+0

+1爲反例,雖然這是一種欺騙,因爲JavaScript「提升」「function」(){return x; var x = 2; }'*語義相同* to'function(){var x; return x; x = 2; }(注意這兩個函數總是返回undefined,因爲這個任務沒有發生!) – user2864740

1

考慮您的課程名爲「語言程序設計」,我想「命令式編程」必須嚴格解釋。引用當前標籤維基,我們有

命令式編程是明確地描述在改變程序狀態的語句方面的控制流表達計算機程序或計算邏輯的一個範例。

可以說,給定的C狀代碼的最合理解釋是int z = 3;是一個變量聲明(和分配),和線z = a + 2;因此聲明之前的使用。假設這是一個合法的程序,它不遵循命令範例,因爲它的控制流程沒有明確描述,即它不是順序的。


這就是說,你是正確的,因爲沒有特定的語法或者格式,該程序可以從字面上做任何事情,包括你指定的內容,計算出π,或在監視器上顯示一個粉紅色的大象。很顯然,我們需要在某個地方畫一條線。考慮到你的課程題爲「語言編程」,我認爲批判性地評估你的可能語言的規範是否合理是一個好方法。

我們有很多語言,其中簡單地使用以前未知的變量隱式聲明它,所以這非常合理。然而,「重申聲明」的一部分,我覺得很不尋常和混亂,並認爲這將是一個糟糕的語言功能。我不知道任何主要的編程語言,它允許它。

因此,我認爲在這種狹隘的情況下,您的答案是「是」應該是主答案爲「否」的答案中的一個附註。


  1. 相似,但不相關的情況下,是其中不同的變量具有相同的名稱,但不同的範圍,並且其中相同的變量可以分配不同類型的對象。
+0

+1代表「程序可以從字面上做任何事情」。 – user2864740