Ir diretamente para o conteúdo principal

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:

  1. | 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 |