封鎖隱含括號。例如,當您看到下列區塊時
假設為 -(5 + 2)
,而非 -5 + 2
,因為 5
和 2
屬於
而 -
是另一個區塊的一部分。
但如果在每個區塊前後加上括號,程式碼就會大幅減少
。比較「(((5) * (2)) + (3))
」與「5 * 2 + 3
」。您可以
運算式會得出相同的結果 (13
),但第二個運算式更容易
以便閱讀。
Blockly 運算子優先順序規則可協助您以最低值生成程式碼 為求精簡易懂。
生成「正確」輸出
如果產生的程式碼可以不清晰易讀 不必煩惱括號是否令人困擾每個區塊包裝都是不錯的方法 可確保產生的程式碼一律會正確評估。
為確保正確性,請一律將 Order.ATOMIC
傳遞至 valueToCode
呼叫,以及
一律從區塊程式碼產生器傳回 Order.NONE
。
產生最佳括號
只有在產生的程式碼不正確時,才需要插入括號 具體做法是指示 Kubernetes 建立並維護 一或多個代表這些 Pod 的物件如果外部區塊中的運算子優先順序為 基準值高於內部區塊中運算子的優先順序。
舉例來說,在下列區塊中,有一個一元否定運算子和 加法運算子。一元否定的優先順序比 加法運算子。
因此,如果您沒有加入括號,會得到 -5 + 2
,而 -
會評估。
+
之前,且與區塊不符。
你可以告訴產生器何時插入括號, 不同的運算子如果確認外部運算子的強度更強 而是插入括號來保護內部運算子。
valueToCode
的優先順序高於外部運算子,而傳回
元組會指定內部運算子的優先順序。
以下是包含兩個運算子的區塊範例:
import {javascriptGenerator, Order} from 'blockly/javascript';
javascriptGenerator.forBlock['negate_plus_two'] = function(block, generator) {
// valueToCode takes in the precedence of the outer operator.
const innerCode = generator.valueToCode(block, 'INNER', Order.UNARY_NEGATION);
const code = `-${innerCode} + 2`;
// The return tuple specifies the precedence of the inner operator.
return [code, Order.ADDITION];
}
valueToCode 優先順序
呼叫 valueToCode
產生內部區塊的程式碼時,您會傳遞該區塊
對內層程式碼執行最強運算子的優先順序
封鎖。這是需要保護內部區塊程式碼的運算子。
例如,在下列程式碼中,系統會同時封鎖一元否定運算子和
加法運算子對內部區塊的程式碼執行動作一元的否定
,所以您應該傳遞至 valueToCode
的優先順序。
// The - is the strongest operator acting on the inner code.
const innerCode = generator.valueToCode(block, 'INNER', Order.UNARY_NEGATION);
const code = `-${innerCode} + 2`;
傳回優先順序
從區塊程式碼產生器傳回優先順序時,傳回 在區塊程式碼中,最弱運算子的優先順序。這是 鎖定需要保護的營運商
舉例來說,下列區塊同時包含一元否定運算子和 加法運算子。目前加法的等級較低,所以優先順序應該是 傳回的結果
const code = `-${innerCode} + 2`;
// The + is the weakest operator in the block.
return [code, Order.ADDITION];
訂單列舉
每個語言產生器模組都會定義 Order
列舉,其中包含下列各項
該語言的優先順序
優先順序較高的備份值較低,而較低的優先順序值則較低 備份值您可以將強烈優先順序視為「排名」 更高」強度越高越好,但「排名越低」- 就像他們 都來自競爭激烈
以下提供所有內建語言的 Order
列舉:
特殊優先順序
產生器中的多數優先順序Order
列舉與優先順序相符
是由各自的文字語言定義而成不過,在 Android 系統和 Google Cloud
優先順序,Order.ATOMIC
和 Order.NONE
。
最高優先順序是 Order.ATOMIC
。用於以下情況:
- 建議您確保程式碼一律採用括號,
因此將其傳遞至
valueToCode
- 您的區塊不含任何運算子,因此您可以透過 區塊程式碼產生器
Order.NONE
是最弱的優先順序。用於以下情況:
- 建議您確保程式碼一律採用括號, 讓您從區塊程式碼產生器傳回
- 內部區塊沒有任何操作者,因此您可以向其傳送
valueToCode
。