Bloklar parantez anlamına gelir. Örneğin, aşağıdaki blokları gördüğünüzde,
5
ve 2
, şu değerin bir parçası olduğu için -5 + 2
değil -(5 + 2)
anlamına geldiğini varsayalım
bir blok ve -
başka bir bloğun parçası.
Ancak her bloğun başına parantez koyarsanız kod
okunabilir. (((5) * (2)) + (3))
ile 5 * 2 + 3
karşılaştırması. Bu iki
ifadeler aynı anlama geliyor (13
) ancak ikincisi çok daha kolay
okudu.
Blockly'nin operatör önceliği kuralları, minimum düzeyde değeri girin.
"Doğru" ifadesini oluşturma çıktı
Oluşturulan kodunuzun okunabilir olması gerekmiyorsa koda gerek yoktur. parantezi en aza indirme konusunda endişelenmenize gerek yoktur. Her bloku sarmalamak iyi bir yaklaşımdır. ve oluşturulan kodunuzun her zaman doğru şekilde değerlendirilmesini sağlar.
Doğruluğundan emin olmak için Order.ATOMIC
hizmetini her zaman valueToCode
çağrılarına iletin ve
her zaman blok kodu oluşturma aracınızdan Order.NONE
değerini döndürün.
En uygun parantezleri oluştur
Parantez yalnızca, oluşturulan kod olmadan yanlış değer girildiğinde eklenmelidir gerekir. Bu, dış bloktaki bir operatörün önceliği iç bloktaki bir operatörün önceliğinden daha güçlüdür.
Örneğin, aşağıdaki bloklarda tekli olumsuzlama operatörü ve ekleme operatörü. Tekli olumsuzlama, ekleme operatörü.
Dolayısıyla, parantez eklemezseniz -5 + 2
alırsınız ve -
değerlendirilir
+
karakterinden önce yer almalıdır.
Oluşturucuya ne kadar güçlü olduğunu söyleyerek parantez eklemesi gerektiğini söyleyebilirsiniz emin olmanız gerekir. Dış operatörün daha güçlü olduğunu görürse iç operatöre oranla iç operatörü korumak için parantez ekler.
valueToCode
, dış operatöre göre önceliklidir ve döndürme
Tuple, iç operatörün önceliğini belirtir.
Aşağıda, iki operatör içeren bir blok örneği verilmiştir:
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 önceliği
Bir iç blokun kodunu oluşturmak için valueToCode
çağrısı yaptığınızda, kodu iletirsiniz
iç hücrenin koduna etki eden en güçlü operatörün önceliği
engelleyebilirsiniz. Bu, iç blok kodunun korunması gereken operatördür.
Örneğin, aşağıdakinde hem tekli olumsuzlama operatörü hem de
ekleme operatörü iç blokun koduna göre hareket eder. Tekli olumsuzlama
daha güçlüdür; bu nedenle valueToCode
öğesine iletmeniz gereken öncelik budur.
// The - is the strongest operator acting on the inner code.
const innerCode = generator.valueToCode(block, 'INNER', Order.UNARY_NEGATION);
const code = `-${innerCode} + 2`;
İade önceliği
Blok kodu oluşturucunuzdan bir öncelik döndürdüğünüzde, bloğun kodundaki en zayıf operatörün önceliğini. Bu, işlecini kullanın.
Örneğin, aşağıdaki blok hem tekli olumsuzlama operatörü hem de ekleme operatörü. Ekleme daha zayıf olduğundan, eklemeniz gereken öncelik budur. işlemi tekrarlandığından emin olun.
const code = `-${innerCode} + 2`;
// The + is the weakest operator in the block.
return [code, Order.ADDITION];
Sipariş sıralaması
Her dil oluşturucu modülü, şunları içeren bir Order
sıralaması tanımlar:
önceliklerini belirleyin.
Daha güçlü öncelikler daha düşük yedekleme değerlerine sahiptir ve daha zayıf öncelikler daha yüksek yedek değerleri sunar. Güçlü öncelikleri, "sıralama" olarak daha yüksek" gücü daha düşük, "daha düşük sırada" ise sanki rekabetçi savaşçılardı.
Tüm yerleşik diller için Order
sıralamalarını burada bulabilirsiniz:
Özel öncelikler
Oluşturucuların önceliklerinin çoğu Order
numaralandırmaları önceliklerle eşleşiyor
ilgili metin tabanlı dillerine göre tanımlanır. Ama iki özel husus var
öncelikler, Order.ATOMIC
ve Order.NONE
.
Order.ATOMIC
en güçlü önceliktir. Şu durumlarda kullanılır:
- Kodun her zaman parantez içinde olduğundan emin olmak istiyorsanız
valueToCode
içine iletiyorsunuz. - Blokunuzda herhangi bir operatör içermediğinden, blokajı blok kodu oluşturma aracı.
Order.NONE
en zayıf önceliktir. Şu durumlarda kullanılır:
- Kodun her zaman parantez içinde olduğundan emin olmak istiyorsanız bu nedenle blok kodu oluşturucunuzdan döndürmeniz gerekir.
- İç blok üzerinde işlem yapan hiçbir operatör olmadığından, bloku
valueToCode