Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: JSON Schema Validation: A Comprehensive Guide

# JSON Schema Validation: A Comprehensive Guide ## Understanding JSONSchemaValidator Ensuring the integrity and compliance of JSON data is crucial for modern applications. **JSONSchemaValidator** is a powerful class designed to validate JSON data against a specified JSON Schema. It provides robust methods to check types, patterns, numerical constraints, required properties, and both internal and external schema references. This guide breaks down the key features and functionalities of JSONSchemaValidator, making it easier for developers to implement schema validation effectively. 🔗 **GitHub Repository:** [JSONSchemaValidator](https://github.com/naldodj/naldodj-hb-jsonschema-validator) --- ## Key Features ✅ **Schema-Based Validation** – Ensures JSON data conforms to a predefined schema. ✅ **Error Handling & Logging** – Captures validation errors for debugging. ✅ **Fast Mode Support** – Stops validation upon detecting the first error. ✅ **Internal & External Reference ...

BlackTDN :: Tips & Tricks : Otimizando aScan e aEval

tips-tricks

Pela minha experiência, sempre que vejo um fonte com as funções aScan e aEval elas estão escritas da seguinte forma:

aScan

aEval

nAT := aScan( aArr , { |x| x == y } )

aEval( aArr , { |x| aAdd(y,x) } )

Vamos observar, segundo o TDN, os parâmetros formais para cada uma dessas funções.

Função: aScan

Executa um bloco de código para cada elemento de um array.

aScan ( < aArray>, < ExpProcura>, [ nInicio], [ nQuant ] ) --> nRet
Nome Tipo Descrição Obrigatório Referência
aArray Vetor Indica o array a ser avaliado. Sim Não
ExpProcura Qualquer

Indica a expressão de busca. Para um array de dimensão simples, pode ser colocado diretamente um valor a ser procurado. Para uma busca mais complexa ou para uma busca em array muti-dimensional, deve ser especificado um bloco de código.

Sim Não
nInicio Numérico

Indica a partir de qual elemento será realizada busca. Por padrão a pesquisa inicia no elemento 1.

Não Não
nQuant Numérico

Indica por quantos elementos serão considerados na operação de busca. Caso não especificado, todos os elementos do array a partir da posição inicial de busca serão considerados.

Não Não

Função: aEVal

Percorre um array procurando por um valor especificado. Pode ser especificado um valor a ser buscado, ou pode ser informada uma condição de busca através de um bloco de código.

aEVal ( < aArray>, < bBloco>, [ nInicio], [ nQuant ] ) --> NIL
Nome Tipo Descrição Obrigatório Referência
aArray Vetor Indica o array a ser avaliado. Sim Não
bBloco Bloco de Código

Indica o bloco de código que será executado para cada elemento encontrado.

Sim Não
nInicio Numérico

Indica o elemento inicial. Caso não seja especificado, o padrão assumido será o elemento um.

Não Não
nQuant Numérico

Indica a quantidade de elementos que serão processados a partir do parâmetro nInicio. Caso não seja especificado, o padrão será todos os elementos do array.

Não Não

Normalmente os parâmetros nInicio e nQuant são omitidos mas, se bem utilizados poderão otimizar a pesquisa conforme exemplo abaixo.

Utilizarei fragmentos do código de GAME 15 para exemplificar.

aScan Exemplo de Otimização
aScan Exemplo de Otimização
aScan Exemplo de Otimização
aScan Exemplo de Otimização

 

magic_tips_and_tricks

Observem que na revisão anterior (em rosa) não utilizava, em aScan, os parâmetros nInico (nBL) e nQuant (nEL) forçando que a pesquisa sempre iniciasse em 1 e finalizasse, caso não encontrasse o elemento da procura, no último elemento do array. Um desperdício uma vez que sabemos o intervalo e o número de elementos para a pesquisa. Dessa forma, ao passarmos os valores para nInicio (nBL) e nQuant (nEL), tornamos a pesquisa em aScan muito mais otimizada.

O mesmo poderemos dizer para aEval(). Só que no caso de aEval desde a versão original de GAME 15 os parâmetros nInicio (nBL) e nQuant (nEL) foram passados. Oras, se sei a partir e quanto avaliar, porque avaliar o Array inteiro.

Observe:

aEval Exemplo de Otimização

Com isso restrinjo o intervalo para avaliação do Bloco de código tornando-a muito mais rápida, ou seja, otimizada.

Em resumo, utilizem os parâmetros nInicio e nQuant em aScan e aEval para otimizar o processo de pesquisa e avaliação.

Fica a dica.

[]s
иαldσ dj

Comentários

Postagens mais visitadas