Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2756 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  fonction de fonction ???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction de fonction ???

n°1680141
katian
Posté le 31-01-2008 à 23:44:38  profilanswer
 

Salut !
 
dans cette ligne : cmd.Field("fid" ).asLong()
 
ok, cmd est un objet, et field et une fonction membre de cmd je suppose mais je ne comprends pas le .asLong() c'est une fonction de fonction ???
 
 :sarcastic:  
 
merci pour votre aide !!!


---------------
e4300 + p5b deluxe + GSKILL PC6400 PK
mood
Publicité
Posté le 31-01-2008 à 23:44:38  profilanswer
 

n°1680142
IrmatDen
Posté le 31-01-2008 à 23:48:33  profilanswer
 

Salut,
 
C'est juste un enchaînement d'appel. cmd.Field() doit renvoyer un objet possédant une méthode asLong.
Ca évite de passer par un objet temporaire (tu y gagnes un peu en lisibilité, mais faut pas non plus en abuser, ni le faire à tout va) genre:

Code :
  1. Machin machin = cmd.Field("fid" )
  2. machin.asLong()

n°1680148
MagicBuzz
Posté le 01-02-2008 à 00:57:32  profilanswer
 

en effet, d'autant que ça peut avoir des effets trompeurs.
En effet, l'objet de retour n'est pas forcément celui qu'à la première lecture on attend.
 
Ici, un exemple en C#, parfaitement reproduisible en C++

Code :
  1. MessageBox.Show(int.TryParse("12", out NullVar).ToString().Substring(0, 1));


 
A la première lecture, on converti "12" en entier, avant de le reconvertir en string, avant de récupérer son premier caractère : on doit afficher "1". (ok, c'est débile, mais c'est un exemple :o)
 
Et non, ça fait pas ça du tout...
int.TryParse() stock dans la variable "NullVar" le résultat de la conversion si elle est réussie, et ça retourne un objet de type "bool" de la valeur "True" ou "False" selon si c'est réussi ou non.
Résultat, ici on affiche "T".
 
L'exemple est bidon, mais ça montre que cela peut être source de confusion.
En passant par un objet intermédiaire, on aura tendance à plus rapidement remettre en question la comportement de TryParse, et vérifier son type de sortie.

Message cité 1 fois
Message édité par MagicBuzz le 01-02-2008 à 01:07:50
n°1680181
Joel F
Real men use unique_ptr
Posté le 01-02-2008 à 08:51:17  profilanswer
 

IrmatDen a écrit :


Ca évite de passer par un objet temporaire


 
Ca depend (du compilo et du type de retour de la premiere methode).
Le fait que l'insatnce temporaire en soit pas explicite ne veut pas dire qu'elle  
n'existe pas

n°1680188
Taz
bisounours-codeur
Posté le 01-02-2008 à 09:16:23  profilanswer
 

MagicBuzz a écrit :

en effet, d'autant que ça peut avoir des effets trompeurs.
En effet, l'objet de retour n'est pas forcément celui qu'à la première lecture on attend.
 
Ici, un exemple en C#, parfaitement reproduisible en C++

Code :
  1. MessageBox.Show(int.TryParse("12", out NullVar).ToString().Substring(0, 1));


 
A la première lecture, on converti "12" en entier, avant de le reconvertir en string, avant de récupérer son premier caractère : on doit afficher "1". (ok, c'est débile, mais c'est un exemple :o)
 
Et non, ça fait pas ça du tout...
int.TryParse() stock dans la variable "NullVar" le résultat de la conversion si elle est réussie, et ça retourne un objet de type "bool" de la valeur "True" ou "False" selon si c'est réussi ou non.
Résultat, ici on affiche "T".
 
L'exemple est bidon, mais ça montre que cela peut être source de confusion.
En passant par un objet intermédiaire, on aura tendance à plus rapidement remettre en question la comportement de TryParse, et vérifier son type de sortie.


 
 
Va-t-en. C# se code aussi avec des caractères, c'est la seul ressemblance. Tout le reste n'est pas pertinent.

n°1680219
MagicBuzz
Posté le 01-02-2008 à 10:01:07  profilanswer
 

A ouais ? T'as jamais vu une méthode retourner un objet après en avoir modifié un autre via pointeur ? Ben ça me ferais bien mal...

n°1680324
IrmatDen
Posté le 01-02-2008 à 11:49:35  profilanswer
 

Joel F a écrit :


 
Ca depend (du compilo et du type de retour de la premiere methode).
Le fait que l'insatnce temporaire en soit pas explicite ne veut pas dire qu'elle  
n'existe pas


Tout à fait; je pensais juste en terme de quantité de code tapé/lu, mais je ne l'ai pas explicité :sweat:  
Autre chose à faire gaffe en écrivant ainsi, les fonctions qui retournent des pointeurs qui peuvent être null dans le flot normal. Dans ce cas, il ne faut pas chaîner pour pouvoir vérifier (ça paraît évident, mais...)
 
@MagicBuzz, là c'est vraiment n'importe quoi. Si tu connais la fonction ParseInt, tu sais très bien que ça va réagir ainsi. Ensuite, on est en C++, alors code en c++ (ou dis rien stp)

n°1680367
MagicBuzz
Posté le 01-02-2008 à 12:44:32  profilanswer
 

parceque ton code VB c'est du C++ peut-être ?

n°1680435
IrmatDen
Posté le 01-02-2008 à 14:08:02  profilanswer
 

Super, il manque le ';' à la fin des lignes, et c'est du VB \o/

n°1680446
MagicBuzz
Posté le 01-02-2008 à 14:19:12  profilanswer
 

ben syntaxiquement, tu peux écrire exactement ce que j'ai écrit en C# en C++, alors y'a pas plus de différence entre mon code et du C++ que le tiens.
y'a juste deux trucs qui vont merder, c'est l'utilisation de "out" au lieu d'un pointeur, ainsi que "int" comme nom d'objet.
 
oh mon dieu c'est trop horrible je vais mourrir, personne ne comprend le parallèle et c'est pas possible de faire pareil en C++ !
 
si t'es pas foutu de comprendre qu'à la différence de 3 mots, tu peux rigoureusement rencontrer ce code et ce comportement dans un programme C++, et que ça va nuire à la compréhension, ben va crever dans ta merde.
 
Tu peux parfaitement imaginer une methode de recherche d'une node dans un arbre avec ce proto :
 
node* GetNode(int value, node* foundNode)
 
Qui retourne le point d'entrée de la branche du tableau qui contient la node, tandis que ça renvoie dans foundNode la node réellement trouvée.
 
Alors après, ouais, t'es censé savoir ce que fait GetNode().
 
En phase de développement sur un petit projet, ça c'est clair.
 
Mais quand tu fais de la TMA et que tu repasses derrière quelqu'un qui code comme un porc, tu t'en sors pas. Eviter la syntaxe "je colle tout mon programme sur une ligne", c'est faciliter le travail des autres.
 
Mais bon, les autres, c'est un truc qui te dépasses certainement.

Message cité 1 fois
Message édité par MagicBuzz le 01-02-2008 à 14:26:11
mood
Publicité
Posté le 01-02-2008 à 14:19:12  profilanswer
 

n°1680455
Elmoricq
Modérateur
Posté le 01-02-2008 à 14:28:07  profilanswer
 

MagicBuzz a écrit :


si t'es pas foutu de comprendre qu'à la différence de 3 mots, tu peux rigoureusement rencontrer ce code et ce comportement dans un programme C++, et que ça va nuire à la compréhension, ben va crever dans ta merde.


 
Bon. Cracotte78 pour l'ensemble de ton oeuvre dans les catégories C et C++ depuis quelques mois, et insultes alors que je t'avais déjà prévenu une fois.
En prenant en compte tes aides régulières dans la cat SQL, on va te mettre une petite semaine, pour te laisser réfléchir au fait que dans les cats C et C++, tu postes vraiment n'importe quoi.
[:elmott]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  fonction de fonction ???

 

Sujets relatifs
Passer une classe à une fonction dans une méthode.Script - Renommer ue photo en fonction de de la date
lancer une fonction php en cliquant sur un boutonlancer une fonction php à partir d'un bouton ("button")
Fonction non accessible par IE et Safari (Objet attendu)Écrire une fonction indicatrice
Fonction qui retourne un booléenfonction récursive et liste doublement chainée
Fonction upload phpma fonction ne fonctionne pas
Plus de sujets relatifs à : fonction de fonction ???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR