PHP para Iniciantes: Estruturas de Controle - DO-WHILE

Se você chegou até aqui lendo cada um dos artigos que publiquei, meus mais sinceros parabéns!

Party Party Yea Yea

Estamos quase chegando no marco de 50 artigos e talvez na metade dos tópicos da linguagem... É muita coisa, né?

Então comemore, divirta-se, festeje, pois se você está estudando certinho e eu estou contribuindo com seu conhecimento, você já tem motivos o suficiente para se presentear pelo seu esforço. Beleza?

Ah, Kiko, e quem te presenteia pelo seu?

Eu mesmo, Eusito

Eu mesmo, ora. Não tô fazendo isso aqui pra ninguém me pagar depois... Nada disso. Aqui o conhecimento é livre, fechado?! Mas põe a cara no sol! Cria uma conta no Hashnode, se ainda não fez isso, segue meu blog, curte meus artigos e compartilha por aí pra mais gente receber essa ajuda. Esse blog não tem nenhum tipo de rentabilidade por views, então não estou pedindo isso por mim, mas por quem ainda não tem acesso a conteúdos como esse.

Enfim, talk is cheap, bora pro artigo!


DO-WHILE

Não é à toa que temos um WHILE no meio da sintaxe dessa estrutura, ele funciona exatamente da mesma forma: uma estrutura de repetições baseada em uma condição.

Então por que ele existe, Kiko?

Pelo simples fato de que o while é na verdade um WHILE-DO. * ba-dum-tis

Apesar da piada ruim, é isso mesmo! O início de cada laço do while começa com a verificação das condições, enquanto o do-while apenas verifica no fim, antes de iniciar o próximo laço.

Se você relembrar do exemplo dos parafusos, lembra que eu mencionei que faria mais sentido usar um do-while? Eu disse isso pois, na vida real, a gente não tem como saber se o parafuso está firme sem dar uma apertada nele antes. Então a gente aperta primeiro e verifica depois: primeiro vem a ação, depois a checagem para saber se precisamos repetir a ação.

Ta-Da

Antes de imergirmos no código, vamos recitar a semântica dessa estrutura:

FAÇA (isso) ENQUANTO (aquiloForVerdade);

E diferente das outras estruturas, essa segue fielmente a semântica! O resultado em inglês é literalmente o que vamos escrever mais abaixo: DO (this) WHILE (thatIsTrue);

<?php

$index = 0;
do {
    echo 'Oi um dois três';
    $condicao = ++$index > 2;
} while ($condicao); // lembre desse ponto-e-vírgula, hein?

Algumas pessoas gostam de colocar subcondições ao longo da execução da ação, para quebrar o laço usando o comando break:

<?php

$index = 0;
do {
    if ($index > 1) { // subcondição, pois existe somente para encerra o do-while
        break; // força o encerramento
    }
    echo 'Oi um dois três';
    $condicao = ++$index > 2;
} while ($condicao);

Uma observação sobre break: essa palavra reservada é válida em toda estrutura de repetição. Serve para forçar o encerramento do laço naquela linha exata.

Opinião pessoal: do-while não precisa de break. Se você chegou nesse ponto, talvez tenha estruturado o código de forma desnecessária. Não é à toa que a verificação está lá no final, sabe? Se for para colocar no começo, por que não usa um while?

Certo, Kiko, e como fica o exemplo do parafuso?

Opa, vamos nessa:

<?php // Parafuso.php
class Parafuso
{
    private int $apertos = 0;
    private const APERTOS_NECESSARIOS = 3;

    public function estaFirme(): bool
    {
        return $this->apertos >= static::APERTOS_NECESSARIOS;
    }

    public function apertar(): void
    {
        $this->apertos++;
    }
}
<?php // index.php ao lado de Parafuso.php
include __DIR__ . '/Parafuso.php';

$parafuso = new Parafuso;
do {
    var_dump($parafuso->estaFirme()); // bool(false) 3 vezes
    $parafuso->apertar();
} while($parafuso->estaFirme());

var_dump($parafuso->estaFirme()); // bool(true)

Conclusão

No fim, tanto while quanto do-while são apenas estruturas de repetição que tem a mesma proposta semântica, porém ao inverso. Dito isso, tudo o que você consegue fazer com um, você pode fazer no outro. A dica aqui é escrever o que faz mais sentido, semanticamente falando. Se primeiro vem a ação e depois as repetições condicionadas, do-while. Caso contrário, while.

Ainda assim, há outros laços para estudarmos mais a frente! No próximo artigo, falaremos sobre uma estrutura importantíssima na vida de todo desenvolvedor, qualquer que seja a linguagem de programação onde está atuando: FOR. Muitas pessoas esquecem como fazer um FOR em PHP por simplesmente não praticar... E é normal! Não somos máquinas, gente. Quem lida com muita linguagem acaba misturando tudo em algum momento. O importante é a pessoa saber disso antes de escrever 500 FORs errados num projeto, rs.

E tem outros laços para gente abordar mais pra frente. Haja paciência...

Ei, Kiko, o do-while não tem a sintaxe procedural?

Não... Curioso, né? Mas realmente não tem. O motivo é simples: ela não começa e termina com "termos iguais". Ela tem uma palavra reservada no início (do) e outra diferente no fim (while), por isso não tem como escrevermos naquela sintaxe. Sacou?

E por hoje é só!

Curtiu?! Comenta e compartilha! Lembra daquele recadinho que eu mandei mais cedo e faz a contribuição do bem aí, hehe. E se você tiver seu blog e quiser divulgar nos comentários, pode ficar a vontade! Eu só peço que não mandem conteúdos NSFW, restrigindo a blogs de conteúdo tech, fechado?

Inté!

Bye... Sim, eu me empolguei com os GIFs. To me sentindo tiozão da web