Blok tabanlı diller, öncelikle yeni başlayan kullanıcılar için tasarlandıkları için metin tabanlı dillerden çeşitli yönlerden farklıdır. Kendi blok tabanlı dilinizi tasarlarken dikkate almanız gereken noktaların listesi aşağıda verilmiştir.
Bire dayalı listeleri kullanma
Acemi programcılar, sıfır tabanlı listelerle ilk kez karşılaştıklarında olumsuz tepki verir. Sonuç olarak Blockly, liste ve dize dizine eklemeyi bir tabanlı hale getirerek Lua ve Lambda Moo'nun izinden gidiyor.
Blockly'nin daha gelişmiş kullanımları için metne geçişi kolaylaştırmak amacıyla sıfır tabanlı listeler desteklenir. Genç veya daha acemi kitleler için yine de 1 tabanlı dizine ekleme önerilir.
Öneri: Bir, ilk sayıdır.
Serbest adlandırma kurallarını destekler
Acemi programcılar, location_X
ve location_x
'un farklı değişkenler olduğunu düşünmez. Sonuç olarak Blockly, değişkenleri ve işlevleri büyük/küçük harf duyarlı hale getirerek BASIC ve HTML'yi takip eder. Scratch daha hassas bir yaklaşım kullanır (sağda görüldüğü gibi) ve değişken adları için büyük/küçük harf duyarlılığı gösterir ancak eşitlik kontrolleri için bunu yapmaz.
Ayrıca Blockly, değişkenlerin ve işlevlerin tipik [_A-Za-z][_A-Za-z0-9]*
şemasına uygun olmasını gerektirmez. Bir değişkeni List
of zip codes
veya רשימת מיקודים
olarak adlandırmak isterseniz bu tamamen normaldir.
Öneri: Büyük/küçük harfleri yoksayın, tüm adlara izin verin.
Tüm değişkenleri genel yapabilirsiniz.
Acemi programcılar da kapsamı anlamakta zorluk çeker. Sonuç olarak Blockly, tüm değişkenleri global hale getirerek Scratch'in izinden gider. Küresel değişkenlerin tek dezavantajı, yinelemenin daha karmaşık olmasıdır (değişkenleri bir listeye eklemek ve listeden çıkarmak gerekir). Ancak bu, Blockly'nin hedef kullanıcılarının kapsamı dışında kalan bir programlama tekniğidir.
Öneri: Kapsam dışında olduğundan daha sonra tekrar gözden geçirin.
İsteğe bağlı döndürülen değerleri nasıl işleyeceğinizi düşünün
Metne dayalı programlamada birçok işlev bir işlem gerçekleştirip ardından bir değer döndürür.
Bu döndürülen değer kullanılabilir veya kullanılamayabilir. Örneğin, bir yığının pop()
işlevi. Pop, son öğeyi almak ve kaldırmak için çağrılabilir veya yalnızca son öğeyi kaldırmak için çağrılabilir. Bu durumda, döndürülen değer yoksayılır.
var last = stack.pop(); // Get and remove last element.
stack.pop(); // Just remove last element.
Blok tabanlı diller genellikle döndürülen değeri yoksaymada iyi değildir. Değer bloklarının, değeri kabul eden bir yere bağlanması gerekir. Bu sorunu gidermek için çeşitli stratejiler vardır.
a) Sorunu atlayın. Blok tabanlı dillerin çoğu, bu tür durumları önlemek için dili tasarlar. Örneğin, Scratch'te hem yan etkisi hem de döndürülen değeri olan bloklar yoktur.
b) İki blok sağlayın. Araç kutusundaki alan sorun değilse bu türden her bir bloktan iki tane (biri döndürülen değere sahip, diğeri döndürülen değer içermeyen) sağlamak basit bir çözümdür. Bunun dezavantajı, neredeyse aynı blokların çok bulunduğu kafa karıştırıcı bir araç kutusuna yol açabilmesidir.
c) Bir bloğu mutasyona uğratın. Kullanıcının döndürülen değer olup olmayacağını seçmesine olanak tanıyan bir açılır menü, onay kutusu veya başka bir denetim kullanın. Ardından blok, seçeneklerine bağlı olarak şeklini değiştirir. Bunun bir örneğini Blockly'nin liste erişimi bloğunda görebilirsiniz.
d) Değeri tüketin. App Inventor'ın ilk sürümü, bağlı tüm değerleri tüketen özel bir boru bloğu oluşturuyordu. Kullanıcılar bu kavramı anlamadı ve App Inventor'ın ikinci sürümünde boru bloğu kaldırıldı ve bunun yerine kullanıcıların değeri tek kullanımlık bir değişkene atamaları önerildi.
Öneri: Her stratejinin avantajları ve dezavantajları vardır. Kullanıcılarınız için doğru olanı seçin.
Okunabilir kod oluşturma
Gelişmiş Blockly kullanıcıları, oluşturulan koda (JavaScript, Python, PHP, Lua, Dart vb.) bakarak yazdıkları programı hemen tanıyabilir. Bu nedenle, makine tarafından oluşturulan bu kodun okunabilir kalması için ek çaba gösterilmesi gerekir. Gereksiz parantezler, sayısal değişkenler, sıkıştırılmış boşluklar ve ayrıntılı kod şablonlarının tümü, zarif kod oluşturmanın önünde engel teşkil eder. Oluşturulan kodda yorumlar bulunmalıdır ve kod Google'ın stil kılavuzlarına uygun olmalıdır.
Öneri: Oluşturduğunuz koddan gurur duyun. Kullanıcıya gösterin.
Diller arasındaki farklılıkları kabul edin
Net kod yazma arzusunun bir yan etkisi, Blockly'nin davranışının büyük ölçüde çapraz derlenmiş dilin davranışı açısından tanımlanmasıdır. En yaygın çıkış dili JavaScript'tir ancak Blockly farklı bir dile çapraz derlenecekse her iki dilde de tam davranışı korumak için mantıksız girişimlerde bulunulmamalıdır. Örneğin, JavaScript'te boş bir dize yanlış, Lua'da ise doğrudur. Blockly'nin kodunun hedef dilden bağımsız olarak yürütülmesi için tek bir davranış kalıbı tanımlamak, GWT derleyicisinden çıkmış gibi görünen, bakımı yapılamayan bir kodla sonuçlanacaktır.
Öneri: Blockly bir dil değildir. Mevcut dilin davranışı etkilemesine izin verin.