Nouveau sujet Répondre Imprimer Syndication RSS 2.0

Break/Return et PHP6

Equipe des MODS
Avatar de Fabogranqi
  • Age : 19 ans
  • Messages : 3095
  • Inscrit : 29 Décembre 2004
  Lien vers ce message 03 Septembre 2008, 19:17

Reprise du dernier message

En C le goto est pas mal utilisé afin de gérer les erreurs. Mais c'est clair que dans un langage objet c'est totalement stupide -_-.
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14520
  • Inscrit : 16 Septembre 2004
Message édité 1 fois, dernière édition par Genova, 03 Septembre 2008, 19:52     Lien vers ce message 03 Septembre 2008, 19:52
Ah ouai ? Comment ça les erreurs en C tu as un exemple ? (Et puis en C goto a tout son sens, puisque le C se veut d'être un langage permettant un max d'optimisations).


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Volcan
Avatar de Sékiltoyai
  • Age : 20 ans
  • Messages : 1034
  • Inscrit : 19 Septembre 2006
  Lien vers ce message 03 Septembre 2008, 20:24
if(/* erreur */) goto end;


http://www.phpfrance.com : Support francophone PHP et Web.
http://sekil.labrute.fr/
 
Equipe de support
Avatar de B.Moncef
  • Age : 18 ans
  • Messages : 1926
  • Inscrit : 10 Septembre 2005
Message édité 2 fois, dernière édition par B.Moncef, 03 Septembre 2008, 20:33     Lien vers ce message 03 Septembre 2008, 20:29
Dans tous les codes C que j'ai pu lire jusqu'ici (nombre relativement petit j'avoue), le traitement des erreurs ne se faisait pas à l'aide de gotos. Elles sont traitées tout de suite, à la suite du if.
Citation
Mais c'est clair que dans un langage objet c'est totalement stupide -_-.

Je continue à dire que même pour un langage "non objet" c'est stupide, ce style de programmation est dépassé depuis des années et il y a d'autres façons de faire pour l'éviter...

EDIT : A signaliner que si ça devait intégrer vraiment PHP, il n'y aurait pas de mot clé goto spécifique, mais break accepterais un label et ferait office de 'goto' dans ce cas.
 
Equipe des MODS
Avatar de Fabogranqi
  • Age : 19 ans
  • Messages : 3095
  • Inscrit : 29 Décembre 2004
Message édité 1 fois, dernière édition par Fabogranqi, 03 Septembre 2008, 21:04     Lien vers ce message 03 Septembre 2008, 20:30
C'est pas vraiment pour optimiser mais plutot pour séparer l'algorithme de la gestion de l'erreur (un peu à la manière des exceptions).<br /><br />Le plus simple c'est que je te donne deux exemples de code, dont l'un qui utilise les goto, et l'autre qui se débrouille sans.

int var1 = -1, var2 = -1, var3 = -1, var_return = -1, int f = -1;

var1 = get_var(1);
if (var1 == OK)
{
	var_return = -2;
	var2 = get_var(2);
	if (var2 == OK)
	{
		var_return = -3;
		var3 = get_var(3);
		if (var3 == OK)
		{
			f = use_vars(var1, var2, var3);
			switch (f)
			{
				case 0:
					var_return = 0;
					break;
				case 1:
					var_return = -101;
					break;
				case 2:
					var_return = -102;
					break;
				case 3:
					var_return = -103;
					break;
				default:
					var_return = -104;
					break;
			}
		}
		else
		{
			delete(var3);
		}
	}
	else
	{
		delete(var2);
	}
}
else
{
	delete(var1);
}

return var_return;


ou
int var1 = -1, var2 = -1, var3 = -1, var_return = -1, f = -1;

var1 = get_var(1);
if (var1 != OK) goto error_var1;

var_return = -2;
var2 = get_var(2);
if (var2 != OK) goto error_var2;

var_return = -3;
var3 = get_var(3);
if (var3 != OK) goto error_var3;

f = use_vars(var1, var2, var3);
switch (f)
{
	case 0:
		var_return = 0;
		goto success;
	case 1:
		var_return = -101;
		break;
	case 2:
		var_return = -102;
		break;
	case 3:
		var_return = -103;
		break;
	default:
		var_return = -104;
		break;
	}
}

error_var3:
	delete(var3);

error_var2:
	delete(var2);

error_var1:
	delete(var1);

success:
	return var_return;


Mais bon c'est pas pour autant que je les utilise en C ^^
 
Equipe des MODS
Avatar de Fabogranqi
  • Age : 19 ans
  • Messages : 3095
  • Inscrit : 29 Décembre 2004
  Lien vers ce message 03 Septembre 2008, 20:39
Dans tous les codes C que j'ai pu lire jusqu'ici (nombre relativement petit j'avoue), le traitement des erreurs ne se faisait pas à l'aide de gotos. Elles sont traitées tout de suite, à la suite du if.
Citation
Mais c'est clair que dans un langage objet c'est totalement stupide -_-.

Je continue à dire que même pour un langage "non objet" c'est stupide, ce style de programmation est dépassé depuis des années et il y a d'autres façons de faire pour l'éviter...

EDIT : A signaliner que si ça devait intégrer vraiment PHP, il n'y aurait pas de mot clé goto spécifique, mais break accepterais un label et ferait office de 'goto' dans ce cas.


C'est une blague ??? T'as pas du regarder beaucoup de code source C jusqu'à présent car il faut le dire, le goto est encore très utiliser en C, tu prend les grosses applications linux, tu trouveras des goto, même mozilla (pas firefox, lui je sais pas) utilise des goto.
 
Volcan
Avatar de Sékiltoyai
  • Age : 20 ans
  • Messages : 1034
  • Inscrit : 19 Septembre 2006
  Lien vers ce message 03 Septembre 2008, 20:53
Apple utilise le même mécanisme dans Carbon (mais c'est caché…).


http://www.phpfrance.com : Support francophone PHP et Web.
http://sekil.labrute.fr/
 
Equipe de support
Avatar de B.Moncef
  • Age : 18 ans
  • Messages : 1926
  • Inscrit : 10 Septembre 2005
  Lien vers ce message 03 Septembre 2008, 20:55
T'as pas du regarder beaucoup de code source C jusqu'à présent

ça doit être ça, parce que c'est pas une blague xD

Par contre pour tes codes d'exemples, je me trompe peut-être, mais c'est pas exactement la même chose. Dans le premier, une des choses qui contribuent à la "laideur" du code, c'est le nombre de niveaux d'imbrications. Tu ne testes var2 == OK que si var1 == OK. Pas le cas dans le deuxième code, m'enfin...

Mais bon les goto en C sont pas un problème, c'est surtout de php qu'il s'agit.
 
Volcan
Avatar de Sékiltoyai
  • Age : 20 ans
  • Messages : 1034
  • Inscrit : 19 Septembre 2006
  Lien vers ce message 03 Septembre 2008, 20:59
C'est trop puissant, avec ca on peut faire des codes sans un seul bloc, pas de if, pas de boucles, pas de classes :p


http://www.phpfrance.com : Support francophone PHP et Web.
http://sekil.labrute.fr/
 
Equipe des MODS
Avatar de Fabogranqi
  • Age : 19 ans
  • Messages : 3095
  • Inscrit : 29 Décembre 2004
  Lien vers ce message 03 Septembre 2008, 21:10
Citation
Tu ne testes var2 == OK que si var1 == OK. Pas le cas dans le deuxième code, m'enfin...


Normal dans mon code, j'utilise un goto si ça foire, donc le code juste après n'est plus exécuté ... (c'est le même principe avec les exceptions c++, quand une exception est lancé le code qui suit dans le try n'est pas executé)
C'est donc justement ça le principale interet, on n'a plus un embriquement interminable de bloc afin de tester si nos données sont toujours valide.
 
Volcan
Avatar de Sékiltoyai
  • Age : 20 ans
  • Messages : 1034
  • Inscrit : 19 Septembre 2006
  Lien vers ce message 03 Septembre 2008, 21:17
c'est le même principe avec les exceptions c++, quand une exception est lancé le code qui suit dans le try n'est pas executé

C'est le même principe dans tous les langages :)


http://www.phpfrance.com : Support francophone PHP et Web.
http://sekil.labrute.fr/
 
Equipe des MODS
Avatar de Fabogranqi
  • Age : 19 ans
  • Messages : 3095
  • Inscrit : 29 Décembre 2004
  Lien vers ce message 03 Septembre 2008, 21:18
Oui je sais mais c'est pour donnée un exemple ^^
 
Répondre


.