En este documento, se exploran las diferentes partes de un bloque.
Conexiones
Las conexiones definen dónde se pueden conectar los bloques y a qué tipo de bloques se pueden conectar.
Existen cuatro tipos de conexiones:
Tipo de conexión | Imagen |
---|---|
Conexión de salida | ![]() |
Conexión de entrada | ![]() |
Conexión anterior | ![]() |
Próxima conexión | ![]() |
Las conexiones de salida y las de entrada se pueden conectar entre sí, y las conexiones siguientes y las anteriores también. Puedes restringir aún más las conexiones con las verificaciones de conexión.
Puedes personalizar las formas de las conexiones con un renderizador personalizado.
Conexiones de nivel superior
Los bloques tienen tres conexiones cuyo uso es opcional.
Un bloque puede tener una sola conexión de salida, representada como un conector de rompecabezas macho en el borde frontal de un bloque. Una conexión de salida pasa el valor (expresión) de un bloque a otro. Un bloque con una conexión de salida se denomina bloque de valor.
Un bloque puede tener una conexión anterior en la parte superior (representada como una muesca) y una conexión siguiente en la parte inferior (representada como una pestaña). Estos permiten que los bloques se apilen verticalmente y representen una secuencia de instrucciones. Un bloque sin una conexión de salida se denomina bloque de sentencia y, por lo general, tiene conexiones anteriores y siguientes.
Para obtener más información, consulta Conexiones de nivel superior.
Campos
Los campos definen la mayoría de los elementos de la IU dentro de un bloque. Estos incluyen las etiquetas de cadenas, los menús desplegables, las casillas de verificación, las imágenes y las entradas para datos literales, como cadenas y números. Por ejemplo, este bloque de bucle usa campos de etiqueta, un campo desplegable y campos numéricos.
Blockly proporciona una serie de campos integrados, incluidos selectores de color, entradas de texto y imágenes. También puedes crear tus propios campos.
Para obtener más información, consulta Campos.
Entradas
Las entradas son contenedores de campos y conexiones. Para compilar un bloque, se renderizan sus entradas en una o más filas como ladrillos.
Existen cuatro tipos diferentes de entradas, todos los cuales pueden contener campos (incluidas las etiquetas) y dos de los cuales contienen una sola conexión. También puedes crear entradas personalizadas, que admiten la renderización personalizada.
Tipo de entrada | Tipo de conexión | Imagen |
---|---|---|
Entrada simulada | Ninguno | ![]() |
Entrada de fin de fila | Ninguno | ![]() |
Entrada de valor | Conexión de entrada | ![]() |
Entrada de sentencia | Próxima conexión | ![]() |
Presentaremos estas entradas a través de una serie de ejemplos. Para obtener información sobre cómo definir las entradas, las conexiones y los campos que conforman un bloque, consulta Estructura de bloques en JSON y Estructura de bloques en JavaScript.
Entradas simuladas
Una entrada simulada es solo un contenedor para campos, no tiene una conexión. Por ejemplo, el siguiente bloque numérico tiene una sola entrada ficticia que contiene un solo campo numérico.
Como ejemplo más complejo, considera un bloque que suma dos números. Esto se podría compilar a partir de una sola entrada ficticia con tres campos (número, etiqueta y número):
o tres entradas simuladas, cada una con un solo campo:
Entradas de fin de fila
Blockly usa heurísticas para decidir si renderizar todas las entradas en una sola fila o renderizar cada entrada en su propia fila. Si quieres asegurarte de que una entrada comience una fila nueva, usa una entrada de fin de fila como la entrada anterior.
Al igual que las entradas simuladas, las entradas de fin de fila pueden contener campos, pero no tienen una conexión. Por ejemplo, este es el bloque de adición creado a partir de una entrada de fin de fila con dos campos y una entrada ficticia con un campo. La entrada de fin de fila obliga a que la entrada ficticia se renderice en una fila nueva.
Entradas de valor
Los campos tienen limitaciones en cuanto a lo que pueden aceptar. Por ejemplo, los campos numéricos solo aceptan números. Pero ¿qué sucede si quieres sumar dos variables? ¿O agregar el resultado de una llamada de procedimiento al resultado de un cálculo diferente? Para resolver este problema, usa conexiones de entrada en lugar de campos. Esto permite que los usuarios usen bloques de valor como valores de entrada.
Una entrada de valor contiene cero o más campos y termina en una conexión de entrada. El siguiente bloque reemplaza los campos numéricos del bloque de adición por conexiones de entrada. Se compila a partir de dos entradas de valor: la primera no contiene ningún campo y la segunda contiene un campo de etiqueta. Ambos terminan en conexiones de entrada.
Entradas de instrucciones
El último tipo de entrada es una entrada de sentencia, que contiene cero o más campos y termina con una conexión siguiente. La siguiente conexión te permite anidar una pila de bloques de sentencias dentro de tu bloque. Por ejemplo, considera el siguiente bloque de repetición. La segunda fila de este bloque consta de una entrada de sentencia con un campo de etiqueta única y una conexión siguiente.
Las entradas de sentencia siempre se renderizan en su propia fila. Puedes ver esto en el siguiente bloque si-entonces-sino, que tiene una entrada de valor en su primera fila y entradas de sentencia en las siguientes dos filas.
Entradas intercaladas en comparación con entradas externas
Las entradas se pueden renderizar en línea o externamente. Esto controla si los conectores para las entradas de valor se renderizan dentro del bloque (incorporados) o en el borde exterior (externos), así como si las entradas se renderizan en las mismas filas o en filas diferentes.
Cuando creas un bloque personalizado, puedes especificar cuál usar o dejar que Blockly lo decida por ti. Para obtener más información, consulta Entradas intercaladas frente a entradas externas.
¡A jugar!
La mejor manera de aprender sobre las entradas, los campos y las conexiones es construir bloques en las Herramientas para desarrolladores de Blockly y elegir diferentes parámetros de configuración para el menú desplegable inputs
(automatic
, external
, inline
).
Íconos
Además de las entradas, las conexiones y los campos, los bloques pueden tener uno o más íconos. Estos tienen varios usos, como mostrar advertencias, ingresar comentarios a nivel del bloque o mostrar la IU del modificador. Por ejemplo, este es un bloque con un ícono de comentario y su editor asociado.
Para obtener más información, consulta Íconos.
Bloques y objetos de JavaScript
Los bloques, las entradas, las conexiones, los campos y los íconos son todos objetos de JavaScript.
Componente de Blockly | Clase base | Subclases |
---|---|---|
Bloquear | Block |
BlockSvg |
Entrada | Input |
DummyInput |
EndRowInput |
||
ValueInput |
||
StatementInput |
||
entrada personalizada | ||
Conexión | Connection |
RenderedConnection |
Campo | Field |
FieldTextInput |
FieldNumber |
||
FieldLabel |
||
campo personalizado | ||
etc. | ||
Ícono | Icon |
CommentIcon |
MutatorIcon |
||
WarningIcon |
||
ícono personalizado |
Los objetos de un bloque forman un objeto con forma de árbol. Comprender cómo la representación gráfica de un bloque corresponde a este árbol es útil cuando escribes código para manipular bloques de forma programática. Por ejemplo, un bloque controls_for
:
corresponde al siguiente árbol de objetos JavaScript.
// <Object> means an instance of an Object.
{ // Block
nextConnection: <Connection>, // ConnectionType NEXT_STATEMENT
outputConnection: null,
previousConnection: <Connection>, // ConnectionType PREVIOUS_STATEMENT
inputList: [ // Array of Inputs in block
{ // ValueInput
connection: <Connection>, // ConnectionType INPUT_VALUE
fieldRow: [ // Array of fields in Input
<FieldLabel>, // 'count with'
<FieldVariable>, // i
<FieldLabel>, // 'from'
],
},
{ // ValueInput
connection: <Connection>, // ConnectionType INPUT_VALUE
fieldRow: [
<FieldLabel>, // 'to'
],
},
{ // ValueInput
connection: <Connection>, // ConnectionType INPUT_VALUE
fieldRow: [
<FieldLabel>, // 'by'
],
},
{ // StatementInput
connection: <Connection>, // ConnectionType NEXT_STATEMENT
fieldRow: [
<FieldLabel>, // 'do'
],
},
]
}