diff options
Diffstat (limited to 'files/pt-br/glossary/first-class_function/index.html')
-rw-r--r-- | files/pt-br/glossary/first-class_function/index.html | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/files/pt-br/glossary/first-class_function/index.html b/files/pt-br/glossary/first-class_function/index.html new file mode 100644 index 0000000000..552b841dfa --- /dev/null +++ b/files/pt-br/glossary/first-class_function/index.html @@ -0,0 +1,99 @@ +--- +title: Função First-class +slug: Glossario/Funcao-First-class +translation_of: Glossary/First-class_Function +--- +<p>Entede-se que uma linguagem de programação tem <strong>Função First-class</strong> quando suas funções são tratadas como qualquer outra variável. Por exemplo, numa linguagem desse tipo, a função pode ser passada como argumento pra outras funções, ser retornada por outra função e pode ser atribuída como um valor à uma variável.</p> + +<h2 id="Exemplo_Atribuir_uma_função_à_uma_variável">Exemplo | Atribuir uma função à uma variável</h2> + +<h3 id="JavaScript">JavaScript</h3> + +<pre class="brush: js">const foo = function() { + console.log("foobar"); +} +// Chamar a função usando a variável +foo(); +</pre> + +<p>Nós atribuímos uma <code>Função Anônima</code> à uma <code>Variável</code>, então usamos a variável pra chamar a função adicionando parênteses <code>()</code> no fim.</p> + +<div class="note"> +<p><strong>Mesmo se sua função for nomeada,</strong> você pode usar o nome da variável pra chamá-la. Nomeá-la será útil quando for debugar seu código. <em>Mas não afetará a maneira que à chamamos.</em></p> +</div> + +<h2 id="Exemplo_Passar_uma_função_como_um_Argumento">Exemplo | Passar uma função como um Argumento</h2> + +<h3 id="JavaScript_2">JavaScript</h3> + +<pre class="brush: js">function sayHello() { + return "Hello, "; +} +function greeting(helloMessage, name) { + console.log(helloMessage() + name); +} +// Passar `sayHello` como um argumento pra função `greeting` +greeting(sayHello, "JavaScript!"); +</pre> + +<p>Nós estamos passando a função <code>sayHello()</code> como um argumento pra função <code>greeting()</code>, isso explica como estamos tratando a função como um <code>valor</code>.</p> + +<div class="note"> +<p>A função que passamos como um argumento pra outra função, chamou uma <strong><a href="/en-US/docs/Glossary/Callback_function">Função Callback</a>.</strong> <em><code>sayHello</code> é uma Função Callback.</em></p> +</div> + +<h2 id="Exemplo_Retornar_uma_função">Exemplo | Retornar uma função</h2> + +<h3 id="JavaScript_3">JavaScript</h3> + +<pre class="brush: js">function sayHello() { + return function() { + console.log("Hello!"); + } +} +</pre> + +<p>Neste exemplo; Precisamos retornar uma função de outra função - <em>Podemos retornar uma função porque tratamos função em JavaScript como um</em><em> </em><em><code>valor</code></em><em>.</em></p> + +<div class="note"> +<p>Uma função que retorna uma função é chamada de <strong>Higher-Order Function</strong></p> +</div> + +<p>De volta ao nosso exemplo; Agora, precisamos chamar a função <code>sayHello</code> e a <code>Função anônima</code> retornada. Existem duas maneiras para fazermos isso:</p> + +<h3 id="1-_Usando_uma_variável">1- Usando uma variável</h3> + +<pre class="brush: js">const sayHello = function() { + return function() { + console.log("Hello!"); + } +} +const myFunc = sayHello(); +myFunc(); +</pre> + +<p>Dessa maneira, ela retorna a mensagem <code>Hello!</code>.</p> + +<div class="note"> +<p>Você tem que usar outra variável. Se você fosse chamar <code>sayHello</code> diretamente, ela retornaria a função em si <strong>sem chamar a função retornada</strong>.</p> +</div> + +<h3 id="2-_Usando_parênteses_duplo">2- Usando parênteses duplo</h3> + +<pre class="brush: js">function sayHello() { + return function() { + console.log("Hello!"); + } +} +sayHello()(); +</pre> + +<p>Estamos usando parênteses duplo <code>()()</code> pra chamar também a função retornada.</p> + +<h2 id="Saiba_mais">Saiba mais</h2> + +<h3 id="Conhecimento_geral">Conhecimento geral</h3> + +<ul> + <li>{{Interwiki("wikipedia", "First-class_function", "First-class functions")}} na Wikipedia</li> +</ul> |