Vamos aprender Boo – Parte 4 – Property and Extension Methods

Publicado em 14/08/2011

1


Olá pessoal, como estamos?!

Se você não conhece Boo, deveria conhecer. É uma excelente alternativa para desenvolvimento em .net com uma sintaxe “aprimorada” de Python.

Como pode ver, esse não é o primeiro post que escrevo sobre o assunto. Se você está chegando agora, deve considerar ler o que já foi escrito.

Extension Methods em Boo

Criar uma extension method em Boo é uma tarefa simples. Basta observar as seguintes regras:

  • o método deverá ser estático;
  • o método deverá ser sinalizado com o atributo Extension;
  • o primeiro parâmetro deverá corresponder ao tipo que estamos extendendo.

Eis nossa implementação:

namespace Extensions
import System

public class StringExtensions:
	[Extension]
	public static def ToPascalCase(value as string):
		return char.ToUpper(value[0]) + value.Substring(1);

Como você pode ver, criamos um extension method chamado ToPascalCase. Basicamente, ele devolve a mesma string que recebeu com a primeira letra (?!) em maiúsculo.

Extension Properties em Boo

Em Boo, também é possível criar Extension Properties (o que acho muito bacana). Observe:

namespace Extensions
import System

public class Int32Extensions:
	[Extension]
	public static Seconds[seconds as int]:
		get:
			return TimeSpan(0, 0, seconds)
	
	
	[Extension]
	public static Minutes[minutes as int]:
		get:
			return TimeSpan(0, minutes, 0)
	
	[Extension]
	public static Hours[hours as int]:
		get:
			return TimeSpan(hours, 0, 0)

O “truque” é utilizar o parâmetro de índice para indicar o tipo que estamos extendendo.

Utilizando Extension Methods e Extension Properties em Boo

A utilização de um Extension Method, ou Extension Property, é muito simples. Diferente do que ocorre em C#, onde “damos um using” no namespace que contem a classe com Extension Methods/Properties, “damos um import” na classe. Observe:

import System
import Extensions.Int32Extensions
import Extensions.StringExtensions

print "elemar".ToPascalCase()
print (2.Hours + 5.Minutes)

// TODO: Implement Functionality Here

print "Press any key to continue . . . "
Console.ReadKey(true)

Executando …

image

Funciona.

Era isso!

Smiley piscando

Etiquetado:
Publicado em: Sem categoria