Tính năng kiểm tra kết nối hạn chế những kết nối nào (và theo đó là các khối) có thể kết nối cho nhau.
Quy trình kiểm tra kết nối rất hữu ích cho các loại mô hình. Ví dụ: như sau ba khối không có doanh nghiệp nào được kết nối vì chúng biểu thị mã trả về nhiều loại khác nhau:
Bạn có thể sử dụng tính năng kiểm tra kết nối để ngăn các khối này kết nối. Chiến dịch này sẽ cung cấp cho người dùng phản hồi tức thì và tránh được nhiều lỗi đơn giản.
Cách hoạt động
Mọi kết nối đều có thể được liên kết với một lượt "kiểm tra kết nối" đây là một biến có thể có giá trị rỗng mảng chuỗi.
Hai kết nối có thể kết nối nếu:
- Các tham số này là các loại tương thích (ví dụ: đầu ra kết nối với đầu vào).
- Các tham số này có chung ít nhất một chuỗi trong quy trình kiểm tra kết nối.
Ví dụ: hai bước kiểm tra sau đây có thể kết nối với nhau vì chúng có chung
Chuỗi 'apple'
:
['apple', 'ball', 'cat']
['apple', 'bear', 'caterpillar']
Nhưng 2 bước kiểm tra sau không kết nối được do không dùng chung bất kỳ chuỗi nào:
['apple', 'ball', 'cat']
['ape', 'bear', 'caterpillar']
Có một trường hợp đặc biệt khác. Nếu một trong hai mảng là null
, thì hai mảng
các kết nối cũng có thể kết nối. Quyền này cho phép bạn xác định các kết nối có thể kết nối
cho bất kỳ thứ gì.
null
['ape', 'bear', 'caterpillar]
Thiết lập bước kiểm tra
Theo mặc định, tất cả các kết nối đều có tuỳ chọn kiểm tra kết nối null
, nghĩa là chúng có thể
kết nối với bất cứ thứ gì. Bạn cần chỉ định hoạt động kiểm tra kết nối theo cách thủ công.
Cách bạn chỉ định hoạt động kiểm tra kết nối sẽ khác nhau tuỳ thuộc vào cho dù bạn đang sử dụng định nghĩa khối JSON hay định nghĩa khối JavaScript.
JSON
Đối với các mối kết nối cấp cao nhất, bạn trực tiếp chỉ định việc kiểm tra cho tài sản
xác định kết nối. Giá trị bạn chỉ định có thể là null
, một chuỗi (
trở thành mục nhập duy nhất trong quá trình kiểm tra kết nối) hoặc một mảng chuỗi.
{
'type': 'custom_block',
'output': null,
'nextStatement': 'a connection check entry',
'previousStatement': ['four', 'connection', 'check', 'entries']
}
Đối với dữ liệu đầu vào, bạn có thể gán bước kiểm tra cho thuộc tính check
của đầu vào
định nghĩa. Nếu thuộc tính check
không tồn tại, bước kiểm tra này sẽ được xem xét
null
Giá trị mà bạn chỉ định có thể là một chuỗi hoặc một mảng chuỗi.
{
'type': 'custom_block',
'message0': '%1 %2',
'args0': [
{
'type': 'input_value',
'check': 'a connection check entry'
},
{
'type': 'input_statement',
'check': ['four', 'connection', 'check', 'entries']
}
]
}
JavaScript
Đối với các kết nối cấp cao nhất, bạn có thể chuyển trực tiếp việc kiểm tra đến phương thức
xác định kết nối. Nếu bạn không chuyển một giá trị, bước kiểm tra này sẽ được xem là
null
. Giá trị bạn truyền có thể là một chuỗi (sẽ trở thành mục nhập duy nhất trong phương thức nhập
kiểm tra kết nối) hoặc một mảng chuỗi.
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']);
}
}
Đối với dữ liệu đầu vào, bạn có thể chuyển bước kiểm tra đến phương thức setCheck
, sau khi bạn
đã xác định đầu vào. Nếu phương thức setCheck
không được gọi, quá trình kiểm tra sẽ
đã xem xét null
. Giá trị bạn chuyển có thể là một chuỗi hoặc một mảng chuỗi.
Blockly.Blocks['custom_block'] = {
init: function() {
this.appendValueInput('NAME')
.setCheck('a connection check entry');
this.appendStatementInput('NAME')
.setCheck(['four', 'connection', 'check', 'entries']);
}
}
Chuỗi kiểm tra được tích hợp sẵn
Các khối tích hợp có tính năng kiểm tra kết nối với giá trị 'Array'
,
'Boolean'
, 'Colour'
, 'Number'
và 'String'
. Nếu bạn muốn chặn
có khả năng tương tác với các khối tích hợp sẵn, nên bạn có thể sử dụng các giá trị này để khiến chúng
tương thích.
Ví dụ về giá trị
Khi xác định các yêu cầu kiểm tra kết nối cho đầu vào và đầu ra, thông thường bạn bạn nên xem quy trình kiểm tra là đại diện cho các loại.
Nguồn đầu vào nên bao gồm mọi "loại" mà chúng chấp nhận và đưa ra' séc phải bao gồm chính xác giá trị mà khách hàng "trả về".
Chấp nhận một loại
Trong trường hợp cơ bản nhất khi bạn muốn tạo khối "chấp nhận" hoặc "trả lại" một loại, bạn cần đưa loại đó vào quy trình kiểm tra kết nối của kết nối.
Chấp nhận nhiều loại
Để tạo khối "chấp nhận" Bạn cần đưa vào mọi loại quảng cáo loại được chấp nhận trong bước kiểm tra kết nối của đầu vào.
Theo quy ước, nếu một kết quả đầu ra đôi khi được chấp nhận trong nhiều tình huống (ví dụ: nếu đôi khi bạn cho phép dùng các số làm chuỗi), kết quả phải là hạn chế hơn và(các) dữ liệu đầu vào phải thoải mái hơn. Quy ước này đảm bảo rằng các đầu ra không kết nối ở nơi không được hỗ trợ.
Chấp nhận mọi loại
Để tạo khối "chấp nhận" bất kỳ loại nào, bạn cần đặt
kiểm tra kết nối với null
.
Loại phụ của dữ liệu trả về
Để tạo khối "trả về" loại phụ, bạn cần bao gồm cả loại và siêu kiểu trong kiểm tra kết nối của đầu ra.
Trong trường hợp có các loại phụ, bạn có thể kiểm tra nhiều lần trong một lần kiểm tra đầu ra, vì khối luôn "trả về" cả hai loại.
Trả về các loại có tham số
Để tạo khối "trả về" là loại có tham số, bạn cần phải đưa cả hai phiên bản có tham số và phiên bản không có tham số trong dữ liệu đầu ra kiểm tra kết nối.
Tuỳ thuộc vào mức độ nghiêm ngặt mà bạn muốn áp dụng cho ngôn ngữ chặn, bạn cũng có thể bao gồm (các) biến thể của loại.
Cũng giống như các loại phụ, bạn có thể kiểm tra nhiều lần trong một bước kiểm tra đầu ra trong trường hợp này, vì khối luôn "trả về" cả hai loại.
Ví dụ về ngăn xếp hoặc câu lệnh
Có một số cách phổ biến mà nhà phát triển xác định các bước kiểm tra trước và tiếp theo kết nối. Thông thường, bạn cho rằng những hành động này là hạn chế thứ tự của các quy tắc chặn.
Các kết nối tiếp theo phải bao gồm khối nào sẽ tuân theo khối hiện tại, và các kết nối trước đó bao gồm khối hiện tại "là gì".
Sắp xếp các khối theo thứ tự
Để tạo một tập hợp các khối kết nối theo thứ tự đã xác định, bạn cần đưa vào khối nào sẽ tuân theo khối hiện tại trong lần kiểm tra kết nối tiếp theo và khối hiện tại "là" gì trong lần kiểm tra kết nối trước đó.
Cho phép nhiều khối ở giữa
Để tạo một tập hợp các khối xếp theo thứ tự cho phép nhiều khối ở giữa, bạn cần có ít nhất một mục nhập từ lần xác nhận kết nối trước đó của khối giữa lần kiểm tra kết nối tiếp theo của khối giữa. Điều này cho phép theo dõi khối nhiều hơn.
Không cho phép chặn giữa
Để tạo một tập hợp các khối xếp theo thứ tự, trong đó các khối ở giữa là không bắt buộc, bạn cần để bao gồm ít nhất một mục nhập từ kết nối trước đó của khối giữa kiểm tra và kiểm tra kết nối trước đó của khối cuối cùng trong khối đầu tiên tiếp theo kiểm tra kết nối. Điều này cho phép khối đầu tiên được theo sau là một giữa hoặc khối cuối cùng.
Ngăn xếp hoặc ngăn xếp
Để tạo một khối mà chỉ có thể theo sau bởi các khối từ một nhóm hoặc các khối từ một thiết bị khác (chứ không phải cả hai), bạn cần làm hai việc:
Bạn cần thêm ít nhất một mục nhập từ cả hai nhóm trước kiểm tra kết nối trong lần kiểm tra kết nối tiếp theo của khối đầu tiên.
Bạn cần xác định các nhóm kiểm tra kết nối tiếp theo để chỉ bao gồm các giá trị trong các lần kiểm tra kết nối trước đó (nên bạn chỉ có thể theo dõi theo khối của cùng một nhóm).
Các điểm hạn chế
Hệ thống này khá mạnh mẽ và có thể giải quyết nhiều trường hợp sử dụng, nhưng cũng có một vài trường hợp hạn chế.
Hạn chế ngữ cảnh rộng hơn
Hệ thống này tự nó không hỗ trợ hạn chế "bối cảnh lớn hơn" inch
kết nối được phép kết nối. Ví dụ: bạn không thể nói rằng một
Khối break
chỉ được phép tồn tại bên trong một khối loop
. Kết nối
hệ thống kiểm tra chỉ xem xét hai kết nối ngay lập tức được kết nối.
Bạn có thể hỗ trợ việc này bằng cách sử dụng hệ thống sự kiện để nghe chặn di chuyển các sự kiện và kiểm tra xem khối có được định vị không chính xác hay không.
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;
},
}
Kiểu chung
Hệ thống này không hỗ trợ việc xác định các kiểu chung. Ví dụ: bạn không thể tạo "Danh tính" khối mà "trả về" bất kể thông tin đầu vào là gì.
Bạn có thể hỗ trợ phần nào đó bằng cách chủ động thay đổi chế độ kiểm tra kết nối trên đầu ra của khối để khớp với đầu vào của nó. Những việc bạn có thể làm bằng cách sử dụng hệ thống sự kiện để nghe các sự kiện di chuyển khối.
Blockly.Blocks['custom_block'] = {
init: function() { }
onchange: function(e) {
if (e.type !== Blockly.Events.BlockMove) return;
this.setOutput(
true, this.getInputTargetBlock()?.outputConnection.getCheck());
}
}
Tuy nhiên, nếu khối được kết nối cũng là khối chung, thì khối này không hoạt động chính xác. Không có cách giải quyết tốt cho trường hợp này.
Công cụ kiểm tra kết nối
Nếu hệ thống này không hoạt động theo trường hợp sử dụng của bạn, bạn cũng có thể thay đổi cách các bước kiểm tra kết nối được so sánh bằng cách tạo một trình kiểm tra kết nối tuỳ chỉnh.
Ví dụ: nếu bạn muốn tạo một hệ thống tiên tiến hơn xử lý một số các giới hạn của quy tắc này, bạn có thể tạo một báo cáo tuỳ chỉnh trình kiểm tra kết nối.