블록 기반 언어는 주로 초보 사용자를 위해 설계되었기 때문에 텍스트 기반 언어와 여러 가지 면에서 다릅니다. 다음은 자체 블록 기반 언어를 설계할 때 고려해야 할 사항 목록입니다.
1부터 시작하는 목록 사용
초보 프로그래머는 0 기반 목록을 처음 접했을 때 나쁜 반응을 보입니다. 따라서 Blockly는 Lua 및 Lambda Moo의 선례에 따라 목록 및 문자열 색인을 1부터 시작합니다.
Blockly를 더 고급으로 사용하려면 텍스트로 더 쉽게 전환할 수 있도록 0 기반 목록이 지원됩니다. 어린이 또는 초보 시청자에게는 1 기반 색인이 여전히 권장됩니다.
권장사항: 1은 첫 번째 숫자입니다.
자유로운 이름 지정 규칙 지원
초보 프로그래머는 location_X
와 location_x
가 서로 다른 변수라고 생각하지 않습니다. 따라서 Blockly는 BASIC 및 HTML의 선례에 따라 변수와 함수의 대소문자를 구분하지 않습니다. Scratch는 더 미묘한 접근 방식을 사용하며 (오른쪽 참고) 변수 이름에는 대소문자를 구분하지만 동등성 검사에는 구분하지 않습니다.
또한 Blockly에서는 변수와 함수가 일반적인 [_A-Za-z][_A-Za-z0-9]*
스키마를 따를 필요가 없습니다. 변수 이름을 List
of zip codes
또는 רשימת מיקודים
로 지정해도 됩니다.
권장사항: 대소문자 무시, 모든 이름 허용
모든 변수를 전역으로 설정
초보 프로그래머도 범위를 이해하기 어렵습니다. 따라서 Blockly는 모든 변수를 전역으로 만들어 Scratch의 선례를 따릅니다. 전역 변수의 유일한 단점은 재귀가 더 까다롭다는 점입니다 (목록에 변수를 푸시하고 팝해야 함). 하지만 이는 Blockly의 타겟 사용자 범위를 벗어난 프로그래밍 기법입니다.
권장사항: 지원 범위에 해당하지 않으므로 나중에 처리합니다.
선택적 반환 값을 처리하는 방법 고려
텍스트 기반 프로그래밍의 많은 함수는 작업을 실행한 후 값을 반환합니다.
이 반환 값은 사용되거나 사용되지 않을 수 있습니다. 스택의 pop()
함수가 그 예입니다. Pop은 마지막 요소를 가져와 삭제하기 위해 호출될 수도 있고, 반환 값을 무시하고 마지막 요소만 삭제하기 위해 호출될 수도 있습니다.
var last = stack.pop(); // Get and remove last element.
stack.pop(); // Just remove last element.
블록 기반 언어는 일반적으로 반환 값을 무시하는 데 능숙하지 않습니다. 값 블록은 값을 허용하는 항목에 연결해야 합니다. 이 문제를 해결하는 데는 여러 가지 전략이 있습니다.
a) 문제를 우회합니다. 대부분의 블록 기반 언어는 이러한 사례를 방지하도록 언어를 설계합니다. 예를 들어 Scratch에는 부작용과 반환 값이 모두 있는 블록이 없습니다.
b) 블록 2개를 제공합니다. 도구 상자의 공간이 문제가 되지 않는 경우 간단한 해결 방법은 이 유형의 블록을 각각 두 개씩 제공하는 것입니다. 하나는 반환 값이 있고 하나는 반환 값이 없습니다. 단점은 거의 동일한 블록이 많이 포함된 혼란스러운 도구 상자가 생길 수 있다는 점입니다.
c) 블록 하나를 변경합니다. 사용자가 반환 값이 있는지 여부를 선택할 수 있는 드롭다운, 체크박스 또는 기타 컨트롤을 사용합니다. 그러면 블록이 옵션에 따라 모양이 변경됩니다. 이러한 예는 Blockly의 목록 액세스 블록에서 확인할 수 있습니다.
d) 값을 사용합니다. App Inventor의 첫 번째 버전은 연결된 모든 값을 소비하는 특수 파이프 블록을 만들었습니다. 사용자는 이 개념을 이해하지 못했으며 App Inventor의 두 번째 버전에서는 파이프 블록을 삭제하고 대신 사용자가 값을 일회용 변수에 할당하도록 권장했습니다.
권장사항: 각 전략에는 장단점이 있으므로 사용자에게 적합한 전략을 선택하세요.
읽기 쉬운 코드 생성
고급 Blockly 사용자는 생성된 코드 (JavaScript, Python, PHP, Lua, Dart 등)를 보고 자신이 작성한 프로그램을 즉시 인식할 수 있어야 합니다. 즉, 이 기계 생성 코드를 읽기 쉽게 유지하기 위해 추가 노력이 필요합니다. 불필요한 괄호, 숫자 변수, 좁게 표시된 공백, 상세한 코드 템플릿은 모두 우아한 코드를 만드는 데 방해가 됩니다. 생성된 코드는 주석을 포함하고 Google 스타일 가이드를 준수해야 합니다.
권장사항: 생성된 코드에 만족하세요. 사용자에게 표시합니다.
언어 간 차이를 수용합니다.
깔끔한 코드를 원하는 결과로 인해 크로스 컴파일된 언어의 동작 방식에 따라 Blockly의 동작이 대체로 정의됩니다. 가장 일반적인 출력 언어는 JavaScript이지만 Blockly가 다른 언어로 크로스 컴파일되는 경우 두 언어에서 정확한 동작을 보존하기 위해 무리한 시도를 해서는 안 됩니다. 예를 들어 JavaScript에서는 빈 문자열이 false이지만 Lua에서는 true입니다. 대상 언어와 관계없이 Blockly 코드가 실행할 단일 동작 패턴을 정의하면 GWT 컴파일러에서 나온 것처럼 유지보수가 불가능한 코드가 생성됩니다.
권장사항: Blockly는 언어가 아니므로 기존 언어가 동작에 영향을 미치도록 허용합니다.