Subcontratar

Sub :: Contrato Módulo oferece programação de contrato pragmático para Perl.
Baixe Agora

Subcontratar Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • Perl Artistic License
  • Preço:
  • FREE
  • Nome do editor:
  • Erwan Lemonnier
  • Site do editor:
  • http://search.cpan.org/~erwan/Sub-Contract-0.09/lib/Sub/Contract.pm

Subcontratar Tag


Subcontratar Descrição

Sub :: Contract Module oferece programação de contrato pragmático para Perl. Sub :: Contract Module oferece programação de contrato pragmático para perl.synopsisfirst de todos, você deve definir uma biblioteca de restrições pseudo-tipo. Uma restrição de tipo é uma sub-rotina que retorna true se o argumento se do tipo certo, e retornará falsos ou croaks, se não. Exemplo: Use regexp :: Comum; # Teste que a variável é um sub is_integer inteiro {my $ i = shift; retorne 0 se (! definido $ i); return 0 se (ref $ 1 ne ""); return 0 se ($ i! ~ / ^ $ re {num} {int} $ /); retorne 1; } sub is_shortdate {...} sub is_account_number {...} sub is_amount {...} # E assim por diante ... para contratar uma função 'superfície' que leva uma lista de 2 inteiros e retorna 1 inteiro: use sub :: contrato QW (contrato); Contrato ('Superfície') -> In (IS_INTEGER, IS_INTEGER) -> OUT (IS_INTEGER) -> Ativar; Sub superfície {# Não há necessidade de validar mais argumentos! # Basta implementar a lógica: retornar $ _ * $ _ ; } Desde o resultado da 'superfície' é uma função de seus argumentos de entrada apenas, podemos querer memorizar (cache): contrato ('superfície') -> em (is_integer, is_integer) -> out (is_integer) -> memoize -> Ativar; se a 'superfície' tomou um hash de 2 inteiros, com as chaves 'altura' e 'largura': use sub :: contrato QW (contrato); Contrato ('Superfície') -> In (altura => is_integer, largura => is_integer) -> out (is_integer) -> Ativar; sub superfície {my% args = @_; retornar $ args {alture} * $ args {largura}; } Claro, um exemplo de vida real é mais parecido com: Usar sub :: contrato QW (contrato IS_A); # contrato o método 'send_money' da classe 'My :: Conta' contrato ("Send_Money") -> In (IS_A ('My :: Conta'), para => is_a ('minha :: conta'), quantidade = > IS_INTEGER, data => is_date) -> out (is_a ('My :: StatusCode') -> Ativar; # e uma chamada para 'send_money' pode parecer: minha conta $ 1 = nova minha :: conta ("você"); minha conta $ 2 = nova minha :: conta ("eu"); $ Account1-> Send_Money (para => $ Account2, quantidade => 1000, data => "2008-06-16"); para fazer um argumento de valor de retorno livre de restrições, basta definir sua restrição para UNDEF: Contrato (" send_money ") -> In (Redef, # Não há necessidade de verificar auto to => is_a ('minha :: conta'), quantidade => undef, # quantidade pode ser qualquer data => is_date) -> Ativar; você também pode Declarar invariantes, pré e pós-condições como nas implementações de programação de contrato habituais: contrato ('foo') -> pré (validate_state_before) -> post (validate_state_after) -> invariante (validate_state) -> Ativar; para desligar todos os contratos dentro namespaces correspondentes '^ minha :: conta ::. * $' use sub :: Contrato :: Piscina QW (get_contract_pool); meu $ piscina = get_contract_pool (); foreach meu contrato $ ($ piscina-> find_contracts_matching ("My :: Conta ::. *")) {$ contrato-> Desativar; } Você pode listar contratos durante o tempo de execução, modificá-los e recompile-os dinamicamente, ou simplesmente desligue-os. Veja 'Sub :: Contrato :: Pool' para detalhes. Requisitos: · Perl.


Subcontratar Software Relacionado

Tie :: OneOff.

Tie :: OneOff é um módulo Perl para criar variáveis amarradas sem definir um pacote separado. ...

157

Download