Sintaxe e estrutura
Sintaxe Basic
O Custom Scripting da IndySoft executa código escrito na sintaxe Basic. A sintaxe básica atual suporta:
·sub .. fim e função .. declarações de fim
·diretivas byref e dim
·if .. então... ou então... fim do construtor
·for .. para .. passo .. próximo construtor
·do .. enquanto... loop e do .. loop .. enquanto os construtores
·fazem .. até... loop e do .. loop .. até aos construtores
·^ , * , / , e , + , - , ou , <> , >=, <= , = , > , < , div , mod , xor , shl , shr operadores
·try .. exceto e tentar... finalmente bloqueia
·select case .. fim do construtor select
·construtores de matrizes (x:=[ 1, 2, 3 ];)
·instrução exit
·acesso a propriedades e métodos de objetos ( ObjectName.SubObject.Property )
Estrutura do script
A estrutura do script é composta por dois blocos principais:
a) declarações de funções e subrotinas e
b) bloco main.
Ambos são opcionais, mas pelo menos um deve estar presente no script.
Alguns exemplos:
ROTEIRO 1:
SUB DoSomething
CallSomething
END SUB
CallSomethingElse
ROTEIRO 2:
ChamarOutraCoisa
ROTEIRO 3:
FUNÇÃO MyFunction
MyFunction = 'Ok!'
END FUNÇÃO
Tal como na linguagem Basic normal, as instruções numa única linha podem ser separadas pelo caractere «:».
Identificadores
Nomes de identificadores no script (nomes de variáveis, nomes de funções e procedimentos, etc.) Siga as regras mais comuns do Basic:
- | deve começar com um caractere (a..z ou A..Z) ou «_», e pode ser seguido por caracteres alfanuméricos ou pelo caractere «_».2. | Não pode conter nenhum outro caractere, exceto espaços. Identificadores válidos:
VarName
_Some
V1A2 _____Some____
Identificadores inválidos:
2Var
O meu nome Mais
Isto,não,é,válido
Instruções de atribuição
As instruções de atribuição (atribuir um valor ou o resultado de uma expressão a uma variável ou a uma propriedade de um objeto) são construídas utilizando o operador «=».
Exemplos:
MyVar = 2
Button.Caption = 'Isto ' + 'está bem.'
As cadeias de caracteres
(sequências de caracteres) são declaradas em Basic utilizando o caractere de aspas duplas (').
Alguns exemplos:
A = 'Este é um texto'
Str = 'Texto ' + 'concat'
Comentários
É possível inserir comentários no interior do script. Pode utilizar os caracteres ' ou REM. O comentário terminará no final da linha.
Exemplos:
' Este é um comentário antes do ShowMessage
ShowMessage('Ok')
REM Este é outro comentário ShowMessage('Mais um ok!')
' E este é um comentário
' com duas linhas
ShowMessage('Fim dos ok')
Variáveis
Não é necessário declarar os tipos das variáveis no script. Assim, declara-se uma variável simplesmente utilizando a diretiva DIM e o seu nome.
Não é necessário declarar variáveis se a propriedade OptionExplicit do script estiver definida como false. Neste caso, as variáveis são declaradas implicit
. Se quiser ter mais controlo sobre o script, defina a propriedade OptionExplicit como true. Isto irá gerar um erro de compilação do tipo «
» se a variável for utilizada mas não tiver sido declarada no script.
Exemplos:
ROTEIRO 1:
SUB Msg
DIM S
S = 'Olá, mundo!'
ShowMessage(S)
END SUB
ROTEIRO 2:
DIM A
A = 0
A = A+1
ShowMessage(A)
Note que, se a propriedade OptionExplicit do script estiver definida como false, não é necessário declarar variáveis em nenhum dos scripts
acima.
Índices
As cadeias de caracteres, os vetores e as propriedades dos vetores podem ser indexados utilizando os caracteres «[» e «]». Por exemplo, se Str for uma variável de cadeia de caracteres, a expressão
Str[3] devolve o terceiro caractere da cadeia de caracteres representada por Str, enquanto Str[I + 1] devolve o caractere
imediatamente a seguir ao caractere indexado por I.
Mais exemplos:
MyChar = MyStr[2]
; MyStr[1] = 'A'; MyArray[1,2] = 1530
; Lines.Strings[2] = 'Algum texto'
Matrizes
O Script suporta construtores de matrizes e matrizes de variantes. Para criar uma matriz, utilize os caracteres «[» e «]». Pode utilizar
para criar construtores de matrizes aninhadas com múltiplos índices. Pode então aceder às matrizes utilizando índices. Se a matriz tiver vários índices,
separe os índices usando «,».
Se a variável for uma matriz de variantes, o script suporta automaticamente a indexação nessa variável. Uma variável é considerada uma matriz de variantes se tiver sido atribuída a um
e através de um construtor de matrizes, se for uma referência direta a uma variável Delphi que seja uma matriz de variantes (ver a integração entre o Delphi e o
mais adiante) ou se tiver sido criada através do procedimento VarArrayCreate.
Os indexadores das matrizes no script começam em 0. Alguns exemplos:
NewArray = [2,4,6,8]
Num = NewArray[1] //Num recebe '4'
MultiArray = [ ['verde','vermelho','azul'] , ['maçã','laranja','limão'] ]
Str = MultiArray[0,2] //Str recebe 'azul'
MultiArray[1,1] = 'nova laranja'
Instruções «if»
Existem duas formas de instrução «if»: «if...then...end if» e «if...then...else...end if». Tal como no caso normal, se a expressão «
» for verdadeira, as instruções são executadas. Se houver uma parte «else» e a expressão for falsa, as instruções após o «else» são executadas.
Exemplos:
IF J <> 0 THEN
Result = I/J
END IF
SE J = 0 ENTÃO
Sair da Sub
CASO CONTRÁRIO
Resultado = I/J
FIM SE
IF J <> 0 THEN
Resultado = I/J
Contagem = Contagem + 1
ELSE
Concluído = True
END IF
Instruções while
Uma instrução while é utilizada para repetir instruções enquanto uma condição de controlo (expressão) for avaliada como verdadeira. A condição do
e de controlo é avaliada antes das instruções. Assim, se a condição de controlo for falsa na primeira iteração, a sequência de instruções «
» nunca será executada. A instrução while executa a instrução que a compõe repetidamente, verificando a expressão antes de cada iteração
. Enquanto a expressão devolver True, a execução continua.
Exemplos:
WHILE (Data[I] <> X)
I = I + 1
END WHILE
WHILE (I > 0)
IF Odd(I) THEN
Z = Z * X
END IF
X = Sqr(X)
END WHILE
WHILE (não Eof(InputFile))
Readln(InputFile, Line)
Process(Line)
END WHILE
Instruções de loop O Script do
suporta instruções de loop. As sintaxes possíveis são:
DO WHILE expr instruções LOOP
DO UNTIL expr instruções LOOP
DO instruções LOOP WHILE expr
DO instrução LOOP UNTIL expr
As instruções serão executadas ENQUANTO a expressão for verdadeira, ou ATÉ que a expressão seja verdadeira. Se a expressão estiver antes das instruções, a condição do control
o será avaliada antes da iteração. Caso contrário, a condição de controlo será verificada após a iteração.
Exemplos:
FAZER
K = I mod J
I = J
J = K
ENQUANTO J ≠ 0
FAZER ENQUANTO I >= 0
Write('Introduza um valor (0..9): ') Readln(I)
ENQUANTO
FAZER
K = I mod J
I = J
J = K
ENQUANTO J <> 0
DO WHILE I < 0
Write('Introduza um valor (0..9): ')
Readln(I)
LOOP
para instruções
O Scripter suporta instruções com a seguinte sintaxe: FOR contador = valorInicial TO valorFinal STEP valorDePasso
instruções NEXT. Para o conjunto de instruções definido com o contador no valor inicial, repete a execução da instrução até «next» e incrementa o valor do contador em «step
», até que o contador atinja o valor final. A parte «step» é opcional e, se for omitida, o valor «stepValue» é considerado 1 (
).
Exemplos:
ROTEIRO 1:
FOR c = 1 TO 10 STEP 2
a = a + c
NEXT
ROTEIRO 2:
FOR i = a TO b
j = i²
sum = sum + j
NEXT
Instruções SELECT CASE O Scripter
suporta instruções SELECT CASE com a seguinte sintaxe:
SELECT CASE selectorExpression
CASE caseexpr1
statement1
CASE expressão_case
instrução
CASE ELSE
instrução_else
END SELECT
Se a expressão do seletor corresponder ao resultado de uma das expressões caseexprn, as instruções respetivas serão executadas.
Caso contrário, a instrução «else» será executada. O resto da instrução «case» é opcional.
Exemplo:
SELECT CASE uppercase(Fruit)
CASE 'lime' ShowMessage('green')
CASE 'orange' ShowMessage('orange')
CASE 'apple' ShowMessage('red')
CASE ELSE ShowMessage('black')
END SELECT |