연결 확인

연결 검사는 연결할 수 있는 연결 (및 차단)을 제한합니다. 제공할 수 있습니다.

연결 검사는 모델링 유형에 유용합니다. 예를 들어 블록 3개는 비즈니스가 연결되지 않는데, 그 이유는 은 다음과 같은 여러 유형을 반환합니다.

빈 목록 블록은 제곱근 블록에 연결되어 있고
대문자 블록

연결 검사를 사용하면 이러한 블록이 연결되는 것을 방지할 수 있습니다. 이 사용자에게 즉각적인 피드백을 제공하고 여러 가지 간단한 실수를 방지합니다.

작동 방식

모든 연결은 '연결 확인'과 연결될 수 있습니다. 이는 null을 허용하는 문자열로 구성된 배열입니다.

다음과 같은 경우 두 연결을 연결할 수 있습니다.

  1. 이는 호환되는 유형 (예: 입력).
  2. 연결 확인에 공통된 문자열이 하나 이상 있습니다.

예를 들어 다음 두 검사는 'apple' 문자열:

['apple', 'ball', 'cat']
['apple', 'bear', 'caterpillar']

그러나 다음 두 검사는 문자열을 공유하지 않으므로 연결할 수 없습니다.

['apple', 'ball', 'cat']
['ape', 'bear', 'caterpillar']

또 다른 특별한 사례가 있습니다. 두 배열 중 하나가 null이면 두 배열은 연결할 수도 있습니다 이를 통해 서로 다른 네트워크 간에 연결할 수 있는 무엇이든 할 수 있어요.

null
['ape', 'bear', 'caterpillar]

검사 설정

기본적으로 모든 연결에는 null 연결 검사가 있습니다. 즉, 무엇이든 연결할 수 있습니다. 연결 확인은 수동으로 할당해야 합니다.

연결에 연결 확인을 할당하는 방법은 다음에 따라 다릅니다. JSON 블록 정의를 사용하든 JavaScript 블록 정의를 사용하든 상관없이

JSON

최상위 연결의 경우 연결을 정의합니다. 할당할 수 있는 값은 null, 문자열( 이 연결 확인의 유일한 항목이 됨) 또는 문자열 배열입니다.

{
  'type': 'custom_block',

  'output': null,
  'nextStatement': 'a connection check entry',
  'previousStatement': ['four', 'connection', 'check', 'entries']
}

입력의 경우 입력의 check 속성에 확인을 할당할 수 있습니다. 정의합니다. check 속성이 없으면 검사가 고려됩니다. null입니다. 할당하는 값은 문자열 또는 문자열 배열일 수 있습니다.

{
  'type': 'custom_block',
  'message0': '%1 %2',

  'args0': [
    {
      'type': 'input_value',
      'check': 'a connection check entry'
    },
    {
      'type': 'input_statement',
      'check': ['four', 'connection', 'check', 'entries']
    }
  ]
}

자바스크립트

최상위 연결의 경우 연결을 정의합니다. 값을 전달하지 않으면 검사가 null 전달하는 값은 문자열( 연결 검사) 또는 문자열 배열이 포함됩니다.

Blockly.Blocks['custom_block'] = {
  init: function() {
    this.setOutput(true); // null check
    this.setNextStatement(true, 'a connection check entry');
    this.setPreviousStatement(true, ['four', 'connection', 'check', 'entries']);
  }
}

입력의 경우 setCheck 메서드에 확인을 전달하면 됩니다. 나타냅니다. setCheck 메서드가 호출되지 않으면 검사는 다음과 같습니다. null로 간주됨 전달하는 값은 문자열 또는 문자열 배열일 수 있습니다.

Blockly.Blocks['custom_block'] = {
  init: function() {
    this.appendValueInput('NAME')
        .setCheck('a connection check entry');
    this.appendStatementInput('NAME')
        .setCheck(['four', 'connection', 'check', 'entries']);
  }
}

내장 검사 문자열

내장 블록에는 'Array' 값으로 연결 확인이 있습니다. 'Boolean', 'Colour', 'Number', 'String' 차단을 설정하려면 기본 제공 블록과 상호 운용되는 경우 이 값을 사용하여 있습니다.

값 예시

입력과 출력에 대한 연결 검사를 정의할 때는 일반적으로 검사를 유형을 나타내는 것으로 생각해야 합니다.

입력 검사에는 모든 '유형'이 포함되어야 합니다 수락하고 출력은 검사 '반환하는' 내용을 정확히 포함해야 합니다.

단일 유형 허용

가장 기본적인 경우에는 또는 'returns' 한 가지 유형이 있는 경우 연결 확인에 해당 유형을 포함해야 합니다.

단일 유형을 허용하는 값 블록

여러 유형 허용

광고를 '수락'하는 차단을 만드는 방법은 다음과 같습니다. 여러 유형을 포함하는 경우 모든 허용되는 유형을 나타냅니다.

여러 유형을 허용하는 값 블록

출력이 가끔 여러 상황에서 허용될 수 있는 경우 (예를 들어 숫자를 문자열로 사용하도록 허용하는 경우) 출력은 다음과 같아야 합니다. 더 제한하고 입력은 더 관대해야 합니다. 이 규칙은 출력이 지원되지 않는 곳에는 연결되지 않도록 합니다.

모든 유형 허용

광고를 '수락'하는 차단을 만드는 방법은 다음과 같습니다. 어떤 유형이든 입력의 null 연결 확인.

모든 유형을 허용하는 값 블록

하위유형 반환

'반환'하는 블록을 만드는 것 하위유형의 경우 유형과 출력의 연결 확인에 상위유형이 포함됩니다.

유형 및 상위 유형을 반환하는 값 블록

하위유형의 경우 출력 검사에 여러 검사를 포함해도 괜찮습니다. 블록이 항상 '반환'하므로 둘 다 사용할 수 있습니다

매개변수화된 유형 반환

'반환'하는 블록을 만드는 것 매개변수화된 유형의 경우 출력의 매개변수화된 버전과 매개변수화되지 않은 버전을 연결 확인

차단 언어의 엄격성 정도에 따라 유형의 분산을 포함합니다.

매개변수화된 유형과 매개변수화되지 않은 유형을 반환하는 값 블록
유형

하위유형과 마찬가지로 출력 검사에 여러 검사를 포함해도 괜찮습니다. 이 경우에는 블록이 항상 '반환'하므로 둘 다 사용할 수 있습니다

스택 또는 구문 예시

개발자가 이전 및 다음 검사에 대한 검사를 정의하는 몇 가지 일반적인 방법이 있습니다. 연결을 설정할 수 있습니다 일반적으로 이를 블록의 순서를 제한하는 것이라고 생각합니다.

다음 연결에는 현재 블록을 따라야 하는 블록이 포함되어야 합니다. 현재 블록이 '무엇인지'를 포함합니다.

블록 정리

정의된 순서로 연결되는 블록 세트를 생성하려면 다음번 연결 확인 시 어떤 블록이 현재의 블록을 따라야 하는지 현재 블록 'is'가 이전 연결 확인에서 확인할 수 있습니다.

강제 순서가 있는 명령문 블록

중간 블록을 많이 허용합니다.

많은 중간 블록을 허용하는 순서가 지정된 블록의 집합을 생성하려면 중간 블록의 이전 연결 체크인 항목을 하나 이상 포함 중간 블록의 다음 연결 확인입니다. 이렇게 하면 스스로 발견하게 됩니다.

많은 중간 블록을 허용하는 명령문 블록

중간 블록 허용 안 함

중간 블록이 선택사항인 순서가 지정된 블록의 집합을 생성하려면 중간 블록의 이전 연결에서 하나 이상의 항목을 포함하도록 첫 번째 블록의 다음 블록에서 마지막 블록의 이전 연결 검사가 연결 확인 이렇게 하면 첫 번째 블록 다음에 중간 블록이 오거나 특정 블록이나 마지막 블록이 있습니다.

중간 블록을 허용하지 않는 명령문 블록

둘 중 하나 또는 스택

한 그룹의 블록만 뒤따를 수 있는 블록 또는 블록 생성 둘 다 가능하지 않은 경우 다음 두 가지를 수행해야 합니다.

  1. 이전 두 그룹의 항목을 하나 이상 포함해야 합니다. 첫 번째 블록의 다음 연결 확인 시

  2. 먼저 대상 그룹의 값만 포함하도록 다음 연결 확인 이는 이전 연결 확인에 있습니다 (따라서 동일한 그룹의 블록에 의해 수행됩니다.

문 블록 뒤에 한 유형의 블록이 여러 개 올 수 있는 경우
둘 다 선택할 수는 없음

제한사항

이 시스템은 꽤 강력하며 많은 사용 사례를 해결할 수 있지만 몇 가지 한계가 있습니다

더 큰 컨텍스트 제한

이 시스템은 자체적으로 '더 큰 컨텍스트'의 제한을 지원하지 않습니다. 인치 지정할 수 있습니다 예를 들어, break 블록은 loop 블록 내부에만 존재할 수 있습니다. 연결 연결 중인 두 연결만 고려합니다.

가능합니다. 이벤트 시스템을 사용해 이벤트를 수신하면 차단 이동 이벤트를 사용하여 블록이 잘못 배치되었는지 확인합니다.

Blockly.Blocks['custom_block'] = {
  init: function() { }

  onchange: function(e) {
    if (this.workspace.isDragging()) return;
    if (e.type !== Blockly.Events.BlockMove) return;
    if (!this.getSurroundLoop()) this.outputConnection.disconnect();
  }

  loopTypes: new Set(); // Your valid *block types* (not connection checks).

  getSurroundLoop: function () {
    let block = this.getSurroundParent();
    do {
      if (loopTypes.has(block.type)) return block;
      block = block.getSurroundParent();
    } while (block);
    return null;
  },
}

일반 유형

이 시스템 자체는 일반 유형 정의를 지원하지 않습니다. 예를 들어 'ID'를 생성하여 '반환'하고 그대로 둡니다.

약간 지원하려면 블록의 출력을 입력과 일치시킵니다. 이벤트 시스템을 사용하여 할 수 있는 작업은 블록 이동 이벤트를 수신 대기합니다

Blockly.Blocks['custom_block'] = {
  init: function() { }

  onchange: function(e) {
    if (e.type !== Blockly.Events.BlockMove) return;
    this.setOutput(
        true, this.getInputTargetBlock()?.outputConnection.getCheck());
  }
}

하지만 연결된 블록이 동시에 일반적이라면 제대로 작동하지 않습니다. 이 케이스에 대한 좋은 해결 방법이 없습니다.

연결 검사기

이 시스템이 사용 사례에 적합하지 않다면 연결 검사의 여러 버전을 커스텀 연결 검사기.

예를 들어, 미래의 데이터 애널리스트와 제한사항이 있는 경우 맞춤 템플릿을 만들어 연결 검사기