عمليات التحقق من الاتصال

تقيّد عمليات التحقّق من الاتصال الاتصالات (وبالتالي حصر إمكانية الوصول) التي يمكن الاتصال بها لبعضنا البعض.

وتُعدّ عمليات التحقّق من الاتصال مفيدة لأنواع النماذج. على سبيل المثال، ما يلي ثلاث كتل لا ترتبط بأي عمل، لأنها تمثل رمزًا أنواعًا مختلفة:

يشير هذا المصطلح إلى كتلة قائمة فارغة متصلة بكتلة جذر تربيعية متصلة بوحدة.
كتلة أحرف كبيرة

يمكن استخدام عمليات التحقّق من الاتصال لمنع توصيل هذه الوحدات المحظورة. هذا النمط ويقدم للمستخدمين ملاحظات فورية ويمنع العديد من الأخطاء البسيطة.

آلية عملها

يمكن ربط كل اتصال بـ "التحقق من الاتصال" وهو قابل للقيم الفارغة مصفوفة السلاسل.

يمكن إجراء اتصالين في الحالات التالية:

  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']
    }
  ]
}

JavaScript

وبالنسبة إلى اتصالات المستوى الأعلى، يمكنك تمرير التحقق مباشرةً إلى الطريقة التي وتحدد الاتصال. في حال عدم تجاوز أي قيمة، سيُؤخذ الفحص في الاعتبار. 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' إذا كنت تريد أن تظهر الأجزاء مع الوحدات المضمنة، يمكنك استخدام هذه القيم لجعلها متوافقة.

أمثلة على القيم

عندما تقوم بتحديد عمليات فحص الاتصال للمدخلات والمخرجات، عادةً ما يجب أن يفكر في الفحوصات على أنها تمثل الأنواع.

الإدخالات يجب أن تتضمن الشيكات كل "نوع" التي يقبلها، وتظهر عمليات التحقّق يجب أن تتضمّن بالضبط ما يتم "إرجاعه".

قبول نوع واحد

في الحالة الأساسية، تريد إنشاء جزء "يقبل" أو "إرجاع" نوع واحد، فأنت بحاجة إلى تضمين هذا النوع في التحقق من اتصال الاتصال.

كتلة قيمة تقبل نوعًا واحدًا

قبول أنواع متعددة

لإنشاء حظر "يقبل" أنواعًا متعددة، فيجب تضمين كل النوع المقبول في التحقق من اتصال المدخل.

كتلة قيمة تقبل أنواعًا متعددة

حسب الاصطلاح، إذا كان من الممكن قبول المخرج في بعض الأحيان في عدة مواقف (على سبيل المثال، إذا سمحت باستخدام الأرقام أحيانًا كسلاسل)، فيجب أن يكون الناتج أكثر تقييدًا، ويجب أن تكون المدخلات أكثر تساهلاً. هذا الاصطلاح والتأكد من أن المخرجات لا تتصل حيث لا تكون معتمدة.

قبول أي نوع

لإنشاء حظر "يقبل" أي نوع، فأنت بحاجة إلى تعيين التحقق من الاتصال بشبكة null

كتلة قيمة تقبل أي نوع

إرجاع الأنواع الفرعية

لإنشاء قطعة "إرجاع" نوعًا فرعيًا، فستحتاج إلى تضمين كل من النوع والنوع المميز في التحقق من اتصال الإخراج.

كتلة قيمة تُرجع نوعها ونوعها الفائق

في حالة الأنواع الفرعية، لا بأس من إجراء عمليات تحقق متعددة في فحص إخراج، لأن الحظر دائمًا "يرجع" كلا النوعين.

عرض الأنواع التي تتضمن مَعلمات

لإنشاء قطعة "إرجاع" نوع معلمة، فأنت بحاجة إلى تضمين كليهما والإصدار المزود بمعاملات والنسخة التي لا تتضمن معلمات في واجهة الإخراج فحص الاتصال.

بناءً على مدى صرامة لغة الحظر التي تريدها، قد تحتاج أيضًا إلى تضمين التباين لهذا النوع.

كتلة قيمة تُرجع نوع المعامل الخاص به بالإضافة إلى معلمة
النوع

كما هو الحال مع الأنواع الفرعية، من المقبول إجراء عمليات تحقق متعددة في فحص الناتج في هذه الحالة، لأن الحظر دائمًا "يرجع" كلا النوعين.

أمثلة على الحزم أو العبارات

هناك عدة طرق شائعة يحدّد بها المطوّرون عمليات التحقّق السابقة والتالية الاتصالات. عادة ما تفكر في هذه على أنها تقييد ترتيب الكتل.

يجب أن تتضمن الاتصالات التالية الأجزاء التي يجب أن تتبع الكتلة الحالية، الاتصالات السابقة تشمل ما هي القطعة الحالية.

حافِظ على ترتيب الأقسام

لإنشاء مجموعة من القطع التي تتصل بترتيب محدد، تحتاج إلى تضمين أي الوحدات التي يجب أن تتبع المجموعة الحالية في عملية التحقق التالية من الاتصال، ما "الكتلة الحالية" في التحقق السابق من الاتصال.

عبارات إلزامية ذات ترتيب إجباري

السماح بالكثير من القوالب الوسطى

لإنشاء مجموعة من الكتل المرتبة التي تسمح بالكثير من الكتل الوسطى، تحتاج إلى تضمين إدخال واحد على الأقل من التحقق السابق من الاتصال للقطعة الوسطى فحص الاتصال التالي للكتلة الوسطى. يسمح هذا الإجراء بمتابعة الحظر. في حد ذاته.

كتل عبارات تسمح بالكثير من الكتل البرمجية الوسطى

عدم السماح بأي مربّعات وسط

لإنشاء مجموعة من الوحدات الأساسية المرتبة تكون فيها الوحدات المتوسطة اختيارية، تحتاج إلى لتضمين إدخال واحد على الأقل من الاتصال السابق للقطعة الوسطى والتحقق من الاتصال السابق في الوحدة الأخيرة في الوحدة التالية فحص الاتصال. يسمح هذا بأن تتبع القطعة الأولى إما بوسط أو حظر آخر.

مجموعات العبارات التي لا تسمح بالجزء الأوسط

أيّ منهما أو حزم

لإنشاء مجموعة يمكن أن تتبعها مجموعات أو حظر من مجموعة واحدة فقط من عنصر آخر (وليس كلاهما)، تحتاج إلى القيام بأمرين:

  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;
  },
}

الأنواع العامة

لا يتيح هذا النظام في حد ذاته تحديد الأنواع العامة. على سبيل المثال: لا يمكنك إنشاء "هوية" تحظره، والذي "يرجع" أيًا كانت مدخلاته.

يمكنك دعم ذلك إلى حد ما من خلال تغيير فحص الاتصال بشكل نشط في مخرجات الكتلة لمطابقة المُدخلات. والتي يمكنك القيام بها باستخدام نظام الحدث من أجل والاستماع لحظر أحداث الحركة.

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

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

ولكن إذا كانت الوحدة المرتبطة أيضًا عامة، لن يعمل ذلك بشكل صحيح. لا يوجد حل جيد لهذه الحالة.

أدوات التحقق من الاتصال

إذا لم يعمل هذا النظام مع حالة استخدامك، يمكنك أيضًا تغيير طريقة عمليات التحقق من الاتصال عن طريق إنشاء أداة التحقّق من الاتصال المخصصة.

على سبيل المثال، إذا أردت إنشاء نظام أكثر تقدمًا يعالج بعض حدود هذا الأمر، يمكنك إنشاء تصميم مخصص مدقق الاتصال.