3
respostas

[Dúvida] Não estou entendendo da onde vem os paramentros das funções

<?php

$dados = require 'dados.php';

$contador = count($dados);
echo "Número de países: $contador\n";

function somaMedalhas(int $medalhasAcumuladas, int $medalhas) {          // POR EXEPLO AQUI DA ONDE ESTÃO VINDO OS PARAMETROS DA FUNÇÃO?
    return $medalhasAcumuladas + $medalhas;
}

    function convertePaisParaLetraMaisucula(array $pais): array `{                 // POR EXEPLO AQUI DA ONDE ESTÃO VINDO OS PARAMETROS DA FUNÇÃO?
    $pais['pais'] = mb_convert_case($pais['pais'], MB_CASE_UPPER);
    return $pais;
}

function verificaSePaisTemEspacoNoNome(array $pais): bool              // POR EXEPLO AQUI DA ONDE ESTÃO VINDO OS PARAMETROS DA FUNÇÃO?
{
    return strpos($pais['pais'], ' ') !== false;
}

$dados = array_map('convertePaisParaLetraMaisucula', $dados);
$dados = array_filter($dados, 'verificaSePaisTemEspacoNoNome');

$medalhas = array_reduce(
    array_map(function (array $medalhas) {
        return array_reduce($medalhas, 'somaMedalhas', 0);
    }, array_column($dados, 'medalhas')),
    'somaMedalhas',
    0
);

usort($dados, function (array $pais1, array $pais2) {
    $medalhasPais1 = $pais1['medalhas'];
    $medalhasPais2 = $pais2['medalhas'];

    $comparacaoOuro = $medalhasPais2['ouro'] <=> $medalhasPais1['ouro'];
    $comparacaoPrata = $medalhasPais2['prata'] <=> $medalhasPais1['prata'];
    return $comparacaoOuro !== 0 ? $comparacaoOuro
        : ($comparacaoPrata !== 0 ? $comparacaoPrata
        : $medalhasPais2['bronze'] <=> $medalhasPais1['bronze']);
});

var_dump($dados);

echo $medalhas;
3 respostas

Olá, tudo bem?

Fica um pouco dificil sem ver o restante do código, mas a principio, "somaMedalhas","convertePaisParaLetraMaisucula" ...etc. São funções que esperam essas informações como parametros. Ou seja, caso você precise somar as medalhas você chamar somaMedalhas(* e aqui é passado as informações, do contrário ela não é executada* );

Espero que ajude!

Abraço!

Sim, isto eu entendi mas de onde essas informações estão vindo? Por exemplo int $medalhasAcumuladas, int $medalhas são variaveis certo? Elas nao deveriam receber valores ao chamar a função?

Bom dia, Maicon tudo bem?

Quando declaramos parâmetros em funções, elas funcionam como varáveis que recebem os valores das entradas que estamos passando na chamada da função.

Vou exemplificar para esclarecer. Vamos usar uma função de soma simples, onde queremos saber o valor de x + y.

Se eu tivesse que fazer esse cálculo recorrentemente, eu iria repetir sempre as mesmas linhas de código onde eu declararia 2 variáveis $x e $y com seus respectivos valores, e de pois retornar o resultado em outra variável por exemplo.

<?php

$x = 2;
$y = 3;

$resultado = $x + $y;
$echo $resultado;

Ok esse código funciona, mas não é prático. Se eu dependo que meu programa execute esse tipo de tarefa com recorrência, o código vai ficar carregado e pouco legível, até mesmo sem confiabilidade, porque uma variável pode ter seu valor manipulado. Ai que entram as funções.

Quando criamos uma função passamos os valores que queremos somar como "parâmetros" na hora que chamar a execução da função:

<?php

function somar(int $x, int $y): int
{
    return $x + $y;
}

$resultado = somar(2, 3);
echo $resultado;

Nesse caso que exemplifiquei acima, a função somar recebe o parâmetro integer $x e $y e depois retorna o valor de soma desses 2 valores, sendo assim eu preciso declarar na sua execução o valor para os dois parâmetros somar(2, 3) o resultado será 5.

Esse é o funcionamento da função com parâmetros em caso sem uma classe, em classes isso fica um pouquinho mais complexo por questões de encapsulamento.

Espero ter ajudado. Bons estudos. Att,