Blog Emmanuel Orchanian

astuce bdd bureautique codage culture débat design énigme français hacking html mathématiques méthodologie santé typographie 

⬆💬/💬⬆ Différence entre la pré-incrémentation et la post-incrémentation

 

 [2146 vues] 2021-12-14 Emmanuel Orchanian

Codage (JavaScript et PHP, mais pas en SQL)

Il ne faut jamais oublier que le fameux i++ n'est qu'une abréviation.
Toutes les écritures suivantes sont équivalentes :
on augmente i de 1

  • i = i + 1
  • i += 1
  • i++ c'est la post-incrémentation
  • ++i c'est la pré-incrémentation
  • le signe = signifie "deviens égal à..."
  • le signe += signifie "on augmente de..."
  • le signe ++ signifie "on augmente de 1"

  • ++i on donne d'abord la valeur de i, puis on l'augmente de 1 (pré-incrémentation)
  • i++, on augmente d'abord i de 1, puis on donne sa valeur (post-incrémentation)

Comment différencier les deux ?

Puisqu'on lit le code de la gauche vers la droite, on peux considérer que le nombre de la variable, c'est sa valeur même, et le ++ c'est l'opération qui consiste à incrémenter.

  • i++ le i d'abord, le ++ après : on renvoi i, puis on augmente
  • ++i le ++ d'abord, le i après : on augmente , puis on renvoi i

Exemples

    /* pré-incrémentation */
    i = 10
    écrire(i)   va écrire 10
    écrire(++i) va écrire 11
    écrire(i)   va écrire 11

    /* post-incrémentation */
    i = 10
    écrire(i)   va écrire 10
    écrire(i++) va écrire 10 (renvoie d'abord i tel qu'il est, puis après l'augmente)
    écrire(i)   va écrire 11

Mon conseil

Distinguer afficher et modifier

  • Si je demande écrire(i), alors j'affiche les choses
  • Si je demande incrémenter(i), alors je modifie i en lui rajoutant +1, dans ce cas i vaudra 11

Problème

  • i++ et ++i font les deux, ils modifient et affichent dans la même instruction

Éviter d'afficher les ++

Je recommande personnellement de ne pas faire les deux en même temps, mais de mettre sur deux lignes différentes la modification de i et son affichage

Transformez

écrire(i++) ;
en
        écrire(i) ;
        ++i ;
    
et
écrire(++i) ;
en
        ++i ;
        écrire(i);
    

Étymologie

  • L'incrémentation, c'est quand on ajoute 1 à un nombre, autrement dit, on fait + 1. Ça vient du latin incrementum où il a une signification d'accroissement (lien Wikipédia).
  • Pré signifie "avant", par exemple le "prénom" c'est ce qui vient avant le nom de famille, on dit "Charles Aznavour", et par "Aznavour Charles".
  • Post signifie "après", post-traumatique par exemple signifie "après un trauma"

Optimisation du code PHP

En PHP le pré-incrémentation est 10% plus rapide que la post-incrémentation

++i est plus rapide que i++

        for ($i=0; $i < 100; ++$i) {
            // code...
        }
    

En général, sur une ligne seule, ne pas utiliser la post-incrémentation :

++$i ; 

Note : en JavaScript c'est également possible mais en faisant mes tests personnels la vitesse est équivalente, voir même très légèrement ralentie...
Puis ça reste de l'optimisation légère, on peux s'en passer, à prendre en compte surtout pour les boucles qui auraient des millions d'occurrences. Personnellement je le fais tout le temps ça n'empêche rien.

Décrémentation i--

C'est tout pareil mais en diminuant de 1 quand on écrit --

Personnellement je ne vous le conseille pas, si vous pouvez passer par du ++ et faire une soustraction ou une multiplication avec -1 c'est mieux, car 99% du temps vous n'utiliserez que des ++, et avec la fatigue vous ne verrez pas passer le -- sous votre nez.
Ou alors commentez les -- d'un gros // WARNING

N'oubliez pas non-plus qu'en SQL le signe -- sert à faire les commentaires mono-ligne, donc si vous l'utilisez machinalement, non-seulement vous ne faite pas ce que vous vouliez, mais en plus vous cassez le reste du code ✨🎉🎊

À consulter

Lien vers la documentation PHP

J'ai essayé d'approfondir au maximum ce sujet et j'espère sincèrement que vous l'avez apprécié !

Merci d'avoir lu !
Si en général vous avez une question, une curiosité, n'hésitez pas me contacter.