Aller au contenu
SlySharp

(Amélioration) L’indentation

Messages recommandés

Bien le bonjour à tous !

 

 

Introduction : Ce cours ne va pas vous apporter d’enormes nouveautés sur Skript, mais si vous voulez vraiment vous lancer dans l’élaboration de Skripts complexes, ces mécanismes est vraiment important! Le mécanisme d’indentation en soit est le fait de décaler le texte vers la droite (tab ou 4 espaces). Ce cours est là pour vous apprendre comment limiter au maximum ce mécanisme afin de simplifier et surtout d’optimiser vos Skript !

 

 

I - Exemple :

 

Bien, commençons par un exemple de ce qu’il faut éviter !

 

on join:
     if player is op:
           if player’s world is « world »:
                 message «Bienvenue monsieur l’op! »
           else:
                 message «Étrange, vous n’etes pas dans le bon monde ! »
     else:
           message «Vous n’etes pas op!»

 

Bon, vous êtes capables de le voir : ce code marche, mais il est extrêmement lourd ! Pourquoi? Ce code se décale jusqu’à 3 tab inutilement et pour quelque chose d’encore très simple !

 

• Comment remédier à ce soucis ?

 

II - Utiliser le «stop» :

 

Vous avez sûrement tous entendu parlé du «stop». Il permet d'arrêter la lecture de la suite du Skript (dans un event ou commande). En règle générale, vous pouvez en abuser si vous n’utilisez pas d’effets sur le temps (wait). Mais le point important est qu’il permet à votre Skript de s’arreter et de ne pas regarder les autres conditions/actions inutilement !

 

>> Conséquence : Le Skript est plus optimisé car il s’arrête quand il a fini de faire ses actions ! De plus, utiliser le stop permet d’éviter les «else:» et donc d’avoir un skript plus compact !

 

Pour reprendre notre exemple initial, effectuons un premier changement avec le stop:

 

on join:
     if player is op:
           if player’s world is « world »:
                 message «Bienvenue monsieur l’op! »
                 stop
           message «Étrange, vous n'êtes pas dans le bon monde ! »
           stop
     message «Vous n’etes pas op!»
     stop

 

Le code apparaît déjà un peu plus simple. Mais comment marche t-il ? Il faut juste réfléchir à propos du «If». Dans notre cas nous somme juste dans une situation où si le joueur est op on fait quelque chose, sinon autre chose.

 

Dans cette situation le else ne sert à rien car si la lecture du code passe dans le if, elle sera stoppée par le «stop» et donc ne passera pas dans l’autre partie du code. Mais surtout si la lecture ne passe pas dans le if, elle passera dans le else dans tous les cas, ce qui le rend inutile !

 

Voici la première partie de la solution de notre code.

 

III - La condition inverse :

 

Là quoi ? Bon d’accord, ce terme je viens de l’inventer mais il décrit bien le mécanisme suivant.

 

En fait, il suffit d’écrire l’inverde de la condition que l’on souhaite, afin d'arrêter la lecture du code. Je sais que comme ça, cela peut paraître étrange, alors regardons un exemple !

 

on join:
     if player is not op:
           message «Vous n’etes pas op!»
           stop
     if player’s world is « world »:
           message «Bienvenue monsieur l’op!»
           stop
     message «Étrange, vous n’etes pas dans le bon monde ! »
     stop

 

Le mécanisme de condition inverse est là dans la première condition. En fait, on regarde si le joueur n’est PAS op au lieu de regarder si il est op, comme ça on peut arrêter le code et ne pas faire les autres comparaisons inutilement.

 

On aurait put également le faire dans la seconde partie mais c’est globalement équivalent avec un mécanisme classique dans ce cas.

 

Conclusion :

 

Ces deux mécanismes (combinés) sont là pour simplifier et optimiser les codes au maximum, ainsi en les combinant quand cela est possible, vos skripts seront beaucoup plus efficaces si ils sont complexes.

 

Pour avoir des exemples concrets d’utilisation de ces mécanismes:

 

- Conditions avant de lancer une commande

- En fait presque à chaque fois qu’il y a des conditions !

 

PS: Lorsqu’il n’y a pas de else, ni autre conditions pensez à la condition sans «if» ni «:» !

 

Voila ce post est enfin terminé! Si vous avez des remarques, n’hésitez pas, et si le concept vous plait faites le savoir ! Merci à vous !

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Très bon tuto, mais je ne sais pas si c'est vraiment utile d'enlever les tabs ^^

Perso je préfère les utiliser, même si c'est peut-être un poil plus lourd :) (et c'est assez rare que je fasse des script aussi cours que celui de l'exemple, donc je ne sais pas si c'est vraiment utile pour moi)

 

Et fait gaffe, tu as utilisé les guillemets «» au lieu de "" :)

Partager ce message


Lien à poster
Partager sur d’autres sites
Très bon tuto, mais je ne sais pas si c'est vraiment utile d'enlever les tabs ^^

Perso je préfère les utiliser, même si c'est peut-être un poil plus lourd :) (et c'est assez rare que je fasse des script aussi cours que celui de l'exemple, donc je ne sais pas si c'est vraiment utile pour moi)

 

Et fait gaffe, tu as utilisé les guillemets «» au lieu de "" :)

 

Bah en fait ton skript comme ça demande moins de ressources donc il est plus optimisé, c’est surtout un lourd avantage quand t’as des gros skripts!

 

Ah oui mais je l’ai écris sur téléphone donc j’ai pas les autres guillemets

Partager ce message


Lien à poster
Partager sur d’autres sites

Bof, perso je n'aime pas trop ce genre de pratique, ça complique la lecture et c'est moins structuré.

Je vois personnellement aucun intérêt à limiter l'indentation, vu que c'est justement là pour mieux structurer son code...

Le principe des "else" est de justement s'exécuter quand la condition a échouée, donc Skript n'exécutera de toute façon pas le code que tes "else" contiennent, si tes conditions sont vérifiées.

D'ailleurs, chacun de tes exemple fait exactement le même nombres de ligne, donc bon (en dehors de tes "stop" à la fin de tes 2 derniers exemples, qui sont eux totalement inutiles, à part ajouter une ligne o_O)...

Partager ce message


Lien à poster
Partager sur d’autres sites
Bof, perso je n'aime pas trop ce genre de pratique, ça complique la lecture et c'est moins structuré.

Je vois personnellement aucun intérêt à limiter l'indentation, vu que c'est justement là pour mieux structurer son code...

Le principe des "else" est de justement s'exécuter quand la condition a échouée, donc Skript n'exécutera de toute façon pas le code que tes "else" contiennent, si tes conditions sont vérifiées.

D'ailleurs, chacun de tes exemple fait exactement le même nombres de ligne, donc bon (en dehors de tes "stop" à la fin de tes 2 derniers exemples, qui sont eux totalement inutiles, à part ajouter une ligne o_O)...

Mes skript font autant de lignes car c’est un skript basique, mais sur un lourd skript c’est pas la quantité de lignes que tu effectues qui est important mais puissance demandé pour lire tes skripts. Si tu ne fais pas une lecture qui s’arrête au bon moment cela consomme beaucoup, donc ne sont pas optimisé du tout.

Et l’optimisation sert pour tout serveur.

 

Voilà si tu veux en savoir plus, dis le, mais sincèrement c’est pas une bonne habitude de rester dans un schèma if/else quand c’est pas utile.

 

PS: Les stops à la fin de l’event permettent de stopper totalement l’event et dans certains cas ils évitent des boucles infinies sont si ils sont utiles.

PPS: Cette méthode est beaucoup plus structurée car si tu as beaucoup de conditions, la lecture se fait en ligne droite et pas en diagonale.

Partager ce message


Lien à poster
Partager sur d’autres sites

Autant l'utilisation de "stop" pourrait aider (et encore, car Skript ne lira que des "else"/"else if" par la suite, donc autant dire que l'impact performance est minime).

 

PS: Les stops à la fin de l’event permettent de stopper totalement l’event et dans certains cas ils évitent des boucles infinies sont si ils sont utiles.

Si le bloc de code (de l'event entier) est fini, il n'y a aucune raison de mettre un "stop", c'est le but de l'indentation de délimiter le code ^^

 

PPS: Cette méthode est beaucoup plus structurée car si tu as beaucoup de conditions, la lecture se fait en ligne droite et pas en diagonale.

Je reste perplexe devant cette argument...

Ce serait la même chose que de dire "Bah dans un fichier YAML/JSON/XML, n'utilise aucune hiérarchie pour tes données, ça affiche le résultat en diagonale, c'est plus structuré de mettre toutes les données les unes après les autres."

Partager ce message


Lien à poster
Partager sur d’autres sites
Autant l'utilisation de "stop" pourrait aider (et encore, car Skript ne lira que des "else"/"else if" par la suite, donc autant dire que l'impact performance est minime).

 

 

Si le bloc de code (de l'event entier) est fini, il n'y a aucune raison de mettre un "stop", c'est le but de l'indentation de délimiter le code ^^

 

 

Je reste perplexe devant cette argument...

Ce serait la même chose que de dire "Bah dans un fichier YAML/JSON/XML, n'utilise aucune hiérarchie pour tes données, ça affiche le résultat en diagonale, c'est plus structuré de mettre toutes les données les unes après les autres."

 

En cas général cette formulation est moins coûteuse à lire pour Skript..

 

Dans ce cas je suis d’accord c’est inutile, mais comme il s’agit d’une action unique c’est pas vraiment grave.

 

Tu ne stoques pas des informations, le but de la lecture de tes codes est d’effectuer uniquement ce qu’elle doit faire. Au final, si tu veux un code plus propre et pro c’est la méthode à suivre (dans un cours d’info dans d’autres langage, c’est la même méthode quand elle est possible)

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.