Stylus - o poder das funções
Funções são bastante parecidas com mixins, no Stylus. A grande diferença é que elas podem retornar valores! Vamos ver como elas funcionam? ;)
Podemos, por exemplo, criar uma função que soma dois valores passados como argumento:
1 | add( a, b ) |
Que compila para:
1 | .wrapper { |
Valores padrão
Podemos também passar valores default para os argumentos:
1 | add( a, b = a ) |
Os valores default dos argumentos nada mais são do que atribuições. Logo, nós podemos também passar funções como valores default:
1 | add( a, b = unit( a, px ) ) |
Repare que o resultado de add( 20 )
não é 20px
, e sim 40px
. A função unit()
faz parte do Stylus. Ela adiciona uma unidade de medida ao valor passado no primeiro parâmetro. O que nós estamos fazendo é atribuir para b
, o valor passado para a
, e ainda adicionando a unidade px
.
Já conseguiu imaginar as milhões de possibilidades que você pode fazer com isso? xD
Parâmetros nomeados
Podemos também passar valores específicos para as funções. Veja o exemplo:
1 | subtract( a, b ) |
Se nós somente passássemos os valores ( 10, 20 )
para a função subtract
, o resultado seria -10
. Mas nós podemos nomear os valores, não necessitando assim passar os parâmetros na mesma ordem em que foram definidos na função. Por isso o resultado é 10
positivo. :D
Você ainda pode passar apenas um dos valores. Se o outro não for passado, ele será undefined
, então podemos utilizar valores padrão para os parâmetros que não são obrigatórios:
1 | subtract( a = 5, b ) |
Locurage! :D
Retorno de múltiplos valores
Podemos retornar valores como se estivéssemos usando um array
em JS. Se atribuirmos vários valores à uma variável, usamos a notação de array
para obter um valor. Exemplo:
1 | sizes = 15px 20px |
O mesmo vale para funções. A diferença é que precisamos invocá-la antes de pegar o valor:
1 | sizes() |
Uma exceção para esses casos, é quando os valores de retorno são identificadores.
No exemplo abaixo, os valores de retorno podem se confundir com atribuições para propriedades:
1 | swap( a, b ) |
Se fizermos isso, tentando usar swap
como mixin, temos como resultado:
1 | body { |
E se tentarmos usar como função, retornando um valor:
1 | body |
Temos como resultado:
1 | body { |
Ou seja: Nada a ver, né meu!
Para remover a ambiguidade, você pode usar parênteses, ou então a palavra-chave return
:
1 | swap( a, b ) |
Que retorna:
1 | body { |
Ou ainda, usando return
:
1 | swap( a, b ) |
O resultado é o mesmo :)
Funções como parâmetro
Também é possível usar funções como parâmetros, para usar como um callback:
1 | add( a, b ) |
Que vai compilar para:
1 | body { |
E isso é apenas o começo do que você pode fazer usando funções no Stylus! Para conhecer todas as possibilidades, visite a documentação oficial, na sessão de functions :D
Até o próximo!
Sobre o #1postperday: https://blog.da2k.com.br/2014/12/31/um-post-por-dia/
Tem alguma sugestão para os próximos posts do #1postperday? Deixe ela aqui: https://github.com/fdaciuk/fdaciuk.github.io/issues/1