CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[PHP] Return au millieu d'une fonction ?

Ganja-Inside
Ganja-Inside
Niveau 9
09 avril 2016 à 21:49:22

Bonsoir à tous,

Voilà j'ai décidé de réécrire une fonction assez complexe (~ 500 lignes) afin d'améliorer les performances et la lisibilité du code

Je me posais une question au niveau du retour des erreurs: au lieu de faire une condition comme celle-là:

if (count($tableau) > 0) {
    Suite du code
} else return "Erreur";

Y'a-t-il un inconvénient de faire directement:

if (count($tableau) == 0) return "Erreur";
Suite du code

Sachant que le return « break » la fonction, je trouve que c'est plus lisible et que ça correspond plus à l'organisation de mon code

Savez-vous si la seconde option peut influencer la performance et la sécurité de mon script ?

Merci d'avance !

Message édité le 09 avril 2016 à 21:51:05 par Ganja-Inside
RogerLeCaillou
RogerLeCaillou
Niveau 10
09 avril 2016 à 22:14:21

Ta solution est meilleure car elle améliore la lisibilité du code en enlevant un niveau d'imbrication pour ce qui suit.

Y a évidemment aucun impact de performances ou de sécurité, c'est un peu bizarre comme question ça pour le coup :hap:

Ganja-Inside
Ganja-Inside
Niveau 9
09 avril 2016 à 22:26:27

Merci pour ta réponse
Je me posais cette question car je ne savais pas si l'interruption nette de la fonction pouvait avoir un impact négatif (comme une fuite de mémoire) :-)

lisarael
lisarael
Niveau 13
09 avril 2016 à 22:57:52

Hors du fait que RogerLeCaillou t'a apporté une réponse solide comme le roc (haha), une fonction de 500+ lignes, c'est un nid à bug. Tu peux plus que certainement en extraire plusieurs petites fonctions, qui seront plus faciles à manipuler par la suite.

Bien qu'il n'ait pas de réel consensus, on essaie de réduire les fonctions au maximum, et dès qu'une fonction dépasse une trentaine de lignes, elle mérite (probablement) un refactor.

Ketchup_returns
Ketchup_returns
Niveau 10
09 avril 2016 à 23:07:20

Dans une fonction il y a autant de return que de résultats possibles à la fonction en fonction des paramètres.
Pour prendre un exemple connu, fait et refait par les étudiants apprenant à développer, la fonction Fibonacci(n) donne :


int Fibonacci(int n){
     if (n <= 1) return 1;
     else return Fibonacci(n - 1) + Fibonacci(n - 2); 
}

Comme tu peux le voir y a plusieurs return la dedans, un pour chaque possibilité. :)

(En l'occurrence c'est du C mais le principe reste identique.)

Message édité le 09 avril 2016 à 23:08:58 par Ketchup_returns
taramay
taramay
Niveau 2
10 avril 2016 à 20:01:34

Bonjour,
La solution donnée est bonne, si je puis me permettre d'ajouter une remarque : pour les remontées d'erreurs je te recommande d'utiliser les exceptions.
Bonne soirée

Chocolayte
Chocolayte
Niveau 73
10 avril 2016 à 20:26:17

Resharper dit souvent "Invert "if" statement to reduce nesting". Si je ne fais pas erreur, en qualité logicielle, la méthode du if () return; permet d'améliorer la profondeur du code

rangerprice
rangerprice
Niveau 10
11 avril 2016 à 00:01:36

tu peux ajouter des assertions statiques afin de check des conditions lors de la compilation du programme.
Ca rendra le code plus lisible et ça sera plus propre.

fluxies
fluxies
Niveau 17
11 avril 2016 à 00:20:29

C'est très bien ce que tu fais, sauf le return "erreur".

Comme ils ont dit les exceptions ca peut être utile, mais si tu les try catch pour au final mettre ta variable à null, renvoie null directement.

RogerLeCaillou
RogerLeCaillou
Niveau 10
11 avril 2016 à 01:01:57

Le 11 avril 2016 à 00:01:36 rangerprice a écrit :
tu peux ajouter des assertions statiques afin de check des conditions lors de la compilation du programme.
Ca rendra le code plus lisible et ça sera plus propre.

Attention, les assertions n'ont pas le même objectif que les tests if/return ou if/throw, faut bien se dire que certains compilateurs de certains langages retirent carrément les assertions du binaire généré s'il n'y a pas un flag particulier de déclaré

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment