[R] Return : concis ou lisible ?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre

Quel type de code utilisez-vous pour Return ?

En une ligne
4
57%
En quatre lignes
3
43%
 
Nombre total de votes : 7

jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

[R] Return : concis ou lisible ?

#1

Message par jpascal »

Bonjour,

Désolé pour le titre peu explicite.

Les fonctions suivantes obtiennent le même résultat.

Code : Tout sélectionner

test1("a")
test2("a")

Func test1($goo)
    If $goo = "a" Then Return MsgBox("", "", "Egal")
    MsgBox("", "", "Différent")
EndFunc   ;==>test1

Func test2($goo)
    If $goo = "a" Then
        MsgBox("", "", "Egal")
        Return
    EndIf
    MsgBox("", "", "Différent")
EndFunc   ;==>test2
La première est plus concise (une ligne au lieu de quatre) tandis que la seconde est plus lisible.

Quels sont les autres désavantages apportés par l'utilisation de Return en une seule ligne ?
Modifié en dernier par jpascal le jeu. 14 janv. 2016 16:46, modifié 1 fois.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Return : concis ou lisible ?

#2

Message par jguinch »

Dans l'état, test1 renvoi 1 et test2 renvoi 0 :roll:
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Return : concis ou lisible ?

#3

Message par mikell »

Code : Tout sélectionner

Msgbox(0,"", test3("a"))

Func test3($goo)
    Return ($goo == "a") ? "Egal" : "Different"
EndFunc   ;==>test2
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] Return : concis ou lisible ?

#4

Message par jpascal »

Désolé si je n'ai pu me faire comprendre. :oops:

Le but de cette discussion n'est pas le résultat obtenu par les fonctions test qui ne sont là que pour l'exemple mais bel et bien de savoir si utiliser Return sur une seule ligne est une "bonne" pratique si tant est que la valeur retournée par la fonction ne nous intéresse pas.

Concrètement, je me sers de Return pour quitter les fonctions dont la valeur retournée m'importe peu. Vaut-il mieux que je sois dans la concision (une ligne) ou est-il préférable que je reste sur 4 lignes ?
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Return : concis ou lisible ?

#5

Message par mikell »

Return n'a que 2 intérêts, faire retourner une valeur par une fonction et forcer la sortie d'une fonction
Si ce n'est que le cas n°2 qui t'intéresse alors les 2 manières de faire sont parfaitement équivalentes
La lisibilité étant une notion subjective (d'ailleurs il y a eu récemment un topic bien chaud sur la question :mrgreen: ) personnellement je ne vois pas une pratique "meilleure" que l'autre
La "bonne" pratique pourrait même plutôt être de ne pas utiliser Return

Code : Tout sélectionner

Func test2($goo)
    If $goo = "a" Then
        MsgBox("", "", "Egal")
        Return
    EndIf
    MsgBox("", "", "Différent")
EndFunc   ;==>test2

Func test2($goo)
    If $goo = "a" Then
        MsgBox("", "", "Egal")
    Else  
        MsgBox("", "", "Différent")
    EndIf
EndFunc   ;==>test2
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2273
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Return : concis ou lisible ?

#6

Message par jchd »

On en revient à la distinction stricte "à la Pascal" entre procédure (ne retournant aucune valeur) et fonction (en retournant une). Sans faire une épistémologie exhaustive des langages de programmation, on voit bien que C par exemple et parmi les langages répandus ayant eu une influence énorme, a complètement érodé cette distinction.

La théorie montre qu'on peut parfaitement se passer des deux (lambda-calcul), mais AutoIt ne possède pas les caractéristiques d'un langage fonctionnel et ce n'est pas demain qu'il risque de les acquérir.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: [..] Return : concis ou lisible ?

#7

Message par mdanielm »

Pour moi, si une Func doit retourner une valeur, Return ne doit apparaître qu'une seule fois dans la Func, à l'avant dernière ligne.
Je suis le premier à enfreindre la règle, lorsqu'il y a des cas particuliers à traiter au début (par exemple dans une Func récurvive) ce qui m'évite un 'if then' et une indentation de la partie principale.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Return : concis ou lisible ?

#8

Message par orax »

mdanielm, est-ce vraiment ton opinion ou est-ce que ce sont encore tes profs qui t'ont dit de faire comme ça ?
(Je n'ai pas dit que c'est bien ou mauvais, je n'ai pas donné mon point de vue, c'est juste une question.)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: [..] Return : concis ou lisible ?

#9

Message par mdanielm »

Les deux, Orax. Les livres d'enseignement de la programmation sont farcis de règles de ce genre, les objectifs étant:
-se prémunir au maximum des erreurs de programmation
-rendre le programme lisible... et là on peut discuter longtemps
C'est une règle que j'ai toujours appliquée donc c'est aussi mon opinion. Bien que parfois, ....
L'idée générale, que je fais mienne, est d'éviter les sorties multiples des blocs: Func et boucles.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Return : concis ou lisible ?

#10

Message par mikell »

Et comment tu fais par exemple pour faire de la gestion d'erreur multiple informative ? avoir différentes valeurs de retour pour @error ça peut être utile
Les UDF sont truffées de "If Not Machin Then Return SetError(n, 0, 0)"
Personnellement j'admets volontiers que pour me débarasser d'une chiée de If...then , souvent je pose un "If not (ou pas not) Machin Then Return Truc" et basta :mrgreen:

[Mode Troll ON]
Et même chose d'ailleurs pour les boucles, mais avec un Exitloop (n)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Return : concis ou lisible ?

#11

Message par Tlem »

Il serait quand même dommageable d'exécuter un tas de lignes de code pour rien.

Imaginons une fonction qui doit exécuter des dizaines ou des centaines de lignes de code avant de retourner une erreur connue depuis le début de la fonction ....

Envoyé de mon appareil mobile avec Tapatalk.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Return : concis ou lisible ?

#12

Message par jguinch »

Moi je suis pour la solution la plus courte.
Comme l'a dit mikell, les UDF sont bourrés de Return/ExitLoop/ContinueLoop et perso je trouve ça très bien. Pareil pour l'opérateur ternaire (mais faut pas non plus tomber dans l'extrême...)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Répondre