Artigo
· Maio 6 3min de leitura

Usando VECTORs em ObjectScript

A maioria dos exemplos que eu vi até agora no OEX (OpenExchange) ou na DC (Developer Community) deixam a impressão de que os VECTORs são apenas algo disponível com SQL com as 3 funções, especialmente em torno de VECTOR_Search.
* TO_VECTOR()
* VECTOR_DOT_PRODUCT ()
* VECTOR_COSINE ()

Há um sumário muito útil escondido no pacote demo iris-vector-search.
Lá você pode encontrar tudo o que precisa em diversos links e cantos.

Eu sentia falta de mais métodos com VECTOR e coloquei uma ideia relacionada a isso no Ideas Portal
 

Em seguida, me lembrei que todo método SQL ou procedure reside em uma série de códigos ObjectScript.
Então fui pesquisar por isso e esse é o resumo da minha pesquisa.

%Library.Vector é a descrição essencial do novo DataType (tipo de dado)
É uma estrutura complexa como objetos ou %DynamicObjects ou expressões $Bit que requerem métodos específicos de acesso.
Também vemos 2 parâmetros requeridos:
* DATATTYPE  - uma vez setado, não pode ser modificado.
  Tipos aceitos: "integer" (ou "int"), "double", "decimal", "string", e "timestamp".
* LEN > 0, pode crescer, mas nunca diminuir.

$vector() / &ve()  é o método básico para acesso ao VECTOR.
Atribuir Dados do Vetor  >>>  SET $VE(. . .) = val
Retornar Dados do Vetor  >>>  WRITE $VE(. . .) ,  SET var=$VE(. . .) 
  DICA: uma posição sozinha retorna o valor, mas uma posição de::para retorna outro vetor!
Deletar Dados do Vetor  >>>  KILL $VE(. . .) 
Todos os 3 requerem pelo menos um parâmetro de posição. Você pode entender isso como dimensões.

$isvector() é obviamente a checagem para o formato correto antes de realizar operações.

$vectorop() / $vop() cobtem todas as outras funções relacionadas aos vetores.
Os parâmetros de chamada geralmente são (operação, vetor) 
Algumas operações oferecem um bitexpr opcional. Ele marca posições/dimensões para serem ex-/in-clusas.
Exemplo: 
- Pense em um vetor 3D. Você só quer operar nos eixos x e y, não em z.

Operações de vetor único

Operações de agregar
 * "count"
 * "max"
 * "min"
 * "sum"
Operações de filtro
 * "defined"
 * "undefined"
 * "<"
 * "<="
 * ">"
 * ">="
 * "="
 * "!="
 * "between"
Operações numéricas
 * "+"
 * "-"
 * "/"
 * "*"
 * "**"
 * "#"
 * "e-"
 * "e/"
 * "ceiling"
 * "floor"
Operações de String
 * "_"
 * "e_"
 * "lower"
 * "upper"
 * "substring"
 * "trim"
 * "triml"
 * "trimr"
Operações de agrupamento
 * "group"
 * "countgb"
Operações diversas
 * "convert"
 * "length"
 * "mask"
 * "positions"
 * "set"
Operações informativas
 * "bytesize"
 * "type"

Operações Multi Vetor   (geralmente 2 vetores)

Operações de filtro vetoriais
 * "v<"
 * "v<="
 * "v>"
 * "v>="
 * "v="
 * "v!="
Operações aritméticas vetoriais
 * "v+"
 * "v-"
 * "v/"
 * "v*"
 * "v**"
 * "v#"
Concatenação de vetores
 * "v_"
Agrupamento de vetores
 * "countg"
 * "maxg"
 * "ming"
 * "sumg"
Mesclagem de vetores
 * "vset"


Você pode ver que há um rico conjunto de ferramentas já disponível.
Se você estudar as documentações em detalhes, o propósito ou vantagem dos resultados pode não parecer evidente imediatamente.


Ainda assim, espero que você tenha conseguido uma visão geral do que j[a está disponível.

Discussão (1)1
Entre ou crie uma conta para continuar