A função CURDATE não funciona corretamente para a adição de dias que extrapolam o calendário. Como exemplo, a instrução a seguir retornar uma data inexistente:

// acrescentando 120 dias a data atual
 > SELECT CURDATE()+120;
 > 20071325

Para resolver isso é usada uma outra função chamada DATE_ADD, responsável pela soma correta de dias em uma determinada data:

// acrescentando 120 dias a data atual
 > SELECT DATE_ADD(CURDATE(), INTERVAL 120 DAY);
 > 2008-04-03

O mesmo pode ser feito para subtrair dias de uma data com a função DATE_SUB.

Com o comando:

array set minha_var { chave {valor} chave2 {valor2} }

Criamos uma array com diversas chaves e valores. Exemplo:

array set produtos { }
set produtos(nome) { Banana Caturra }

puts $produtos(nome)

# Retorna: Banana Caturra

Para listar todas as chaves e valores utilizamos o comando:

array names produtos

Exemplo de utilização:

foreach key [array names produtos] {
	puts "Chave: $key"
	puts "Valor: $produtos($key)"
}

Para manipular Strings em Tcl, utilizamos o comando string.

Se precisar substituir ponto por vírgula:

set valor { 10.00 }
puts [string map -nocase { . , }  $valor]

# Retorna: 10,00

Podemos substituir várias cadeias de caracteres:

set texto "Este é um texto de teste de substituição"
puts [string map -nocase { e E s S b B } $texto]

# Retorna: EStE é um tExto dE tEStE dE SuBStituição

Naturalmente, podemos substituir palavras:

set texto "Este é um texto de teste de substituição"
puts [string map -nocase { teste TESTE um {o segundo} } $texto]

# Retorna: Este é o segundo texto de TESTE de substituição

E possível destinar um diretório para nossos códigos auxiliares ou plugins, e na inicialização do sistema importá-los, utilizando o comando source.

Por exemplo, considerando que há vários arquivos .tcl no diretório plugin/

foreach p "[glob plugin/*.tcl]" {
	source $p
}

Palavras-chave: Tcl/Tk, capturar, erros

Quando um procedimento é executando em Tcl, ele retorna 1 (sucesso) ou 0 (falha). É este resultado que faz o interpretador mostrar ou não um erro.

Para não mostrar o erro ao usuário, mas detectá-lo e tratá-lo no código, use o comando catch. Ele chama o interpretador Tcl de forma recursiva, executando o código e retorna 5 possíveis sinais:

  • 0 - TCL_OK
  • 1 - TCL_ERROR
  • 2 - TCL_RETURN
  • 3 - TCL_BREAK
  • 4 - TCL_CONTINUE

Por exemplo, como saber se a conexão ao banco de dados foi bem sucedida?

if { [catch {set token [mysqlconnect \
	-host sqlserver \
	-user user_db \
	-db banco_de_dados \
	-password senha]} err_con] } {
    puts "Erro ao Conectar : $err_con"
}

Se o comando de conectar obteve sucesso, o catch retorna 0 (zero) ou false, fazendo com que o if não execute.

Lançado em Dezembro de 2006, o CODARE trouxe uma abordagem direta e objetiva aos problemas que o programador enfrenta. Com dicas rápidas e claras, sem enrolação o problema é descrito e sua solução apresentada.

Hoje, vendo as estatísticas do WordPress, percebi que chegamos na dica de número 100!

Codare 100 posts!

Parabéns a todos do time pelo excelente trabalho e obrigado a todos os leitores que contribuem com comentários (283!) que enriquecem as dicas.

Que tudo continue assim, compilando e funcionando sem bugs :)

Palavras-chave: Tcl/Tk, pack, grid, place

A sintaxe padrão para a criação de widgets é:

  widget toplevel.my_id opções_do_widget
  pack toplevel.my_id opções_do_pack

Mas também é possível reunir tudo em uma só linha:

  pack [widget toplevel.my_id opções_do_widget] opções_do_pack

Por exemplo:

  label .my_label -text "Oi Mundo!" -bg red -fg yellow
  pack .my_label -expand yes -fill x

Também pode ser escrito como:

  pack [label .my_label -text "Oi Mundo!" -bg red -fg yellow] \
       -expand yes -fill x

Palavras-chave: PHP, __call, métodos dinâmicos, orientação a objetos

O PHP tem uma função mágica chamada __call(). Se sua classe declarar um método com este nome, ele será invocado sempre que for feita uma chamada a um método não existente naquela classe.

Esta invocação receberá como parâmetro o nome do método chamado e os argumentos. É um mecanismo tradicional e simples, mas muito poderoso. Já existia no Smalltalk, através da mensagem doesNotUnderstand, que tinha exatamente a mesma semântica.

As aplicações são diversas: interceptação de chamadas, proxying, dynamic dispatching etc. Estas brincadeiras divertidas são muito úteis para a construção de bibliotecas e frameworks dinâmicos, por exemplo, para web ou mapeamento objeto-relacional.

Um exemplo para ilustrar:

class ClasseComTodosOsMetodosDoMundo
{
    public function __call($m, $a)
    {
        echo "Método invocado: $m\n";
    }
}

$o = new ClasseComTodosOsMetodosDoMundo();
$o->umMetodoQualquer();
$o->umMetodoAssimAssado();

Que vai ter a saída:

Método invocado: umMetodoQualquer
Método invocado: umMetodoAssimAssado
Add to Technorati Favorites

a