typage statique suxor

typage statique suxor - Java - Programmation

Marsh Posté le 09-10-2002 à 16:26:31    

Long toto = new Long("434" );
System.out.println(toto); //ok
System.out.println( (toto!=null) ? "" : toto.toString()); //ok
System.out.println( (toto!=null) ? "" : toto); //blam


Message édité par lorill le 09-10-2002 à 16:43:26
Reply

Marsh Posté le 09-10-2002 à 16:26:31   

Reply

Marsh Posté le 09-10-2002 à 16:30:25    

euh ?

Reply

Marsh Posté le 09-10-2002 à 16:31:07    

coin


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 09-10-2002 à 16:31:50    

:ange:  
 
 
Long n'est pas castable en String
Or c'est ce qui se passe quand tu fais ()?:  je présume...


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 09-10-2002 à 16:31:51    

GREG ! REMETS TON MESSAGE TOUT DE SUITE !
 
c'est vrai quoi, de quoi j'ai l'air maintenant :(

Reply

Marsh Posté le 09-10-2002 à 16:32:14    

lorill a écrit a écrit :

GREG ! REMETS TON MESSAGE TOUT DE SUITE !
 
c'est vrai quoi, de quoi j'ai l'air maintenant :(



ben voila il est là :D


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 09-10-2002 à 16:33:04    

lorill a écrit a écrit :

GREG ! REMETS TON MESSAGE TOUT DE SUITE !
 
c'est vrai quoi, de quoi j'ai l'air maintenant :(




 
j etait sur qu il avait repondu !!!
 
greg c pas bien d effacer tes messages  :o

Reply

Marsh Posté le 09-10-2002 à 16:33:43    

il fait ca tout le temps qd il raconte des bêtises


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 09-10-2002 à 16:33:49    

--greg-- a écrit a écrit :

 :ange:  
Long n'est pas castable en String
Or c'est ce qui se passe quand tu fais ()?:  je présume...




 
?: n'a pas a caster quoi que ce soit :??:

Reply

Marsh Posté le 09-10-2002 à 16:34:48    

Et pourtant  
System.out.println( (toto!=null) ? new Long(0) : toto); //ok
 
crotte. Pourquoi ?: demande que les deux opérandes soient du même type ?

Reply

Marsh Posté le 09-10-2002 à 16:34:48   

Reply

Marsh Posté le 09-10-2002 à 16:38:28    

lorill a écrit a écrit :

 Pourquoi ?: demande que les deux opérandes soient du même type ?




 
Parceque


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 09-10-2002 à 16:38:30    

lorill a écrit a écrit :

Et pourtant  
System.out.println( (toto!=null) ? new Long(0) : toto); //ok
 
crotte. Pourquoi ?: demande que les deux opérandes soient du même type ?



ben euh c logique nan?  
 
MaClasseDeMonCul monInstance = (a==b) new String("pouet" ) : new InputStream("tralala" );
 
tu voudrais que ça marche ça? :/


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 09-10-2002 à 16:39:18    

--greg-- a écrit a écrit :

 
tu voudrais que ça marche ça? :/




 
Oui (smalltalk p0w4h)


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 09-10-2002 à 16:41:33    

kadreg a écrit a écrit :

 
 
Oui (smalltalk p0w4h)




euh ...


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 09-10-2002 à 16:41:50    

--greg-- a écrit a écrit :

ben euh c logique nan?  
 
MaClasseDeMonCul monInstance = (a==b) new String("pouet" ) : new InputStream("tralala" );
 
tu voudrais que ça marche ça? :/




 
Oui. Je trouves ca aberrant que ca ne marche pas, même apres avoir lu la spec. http://java.sun.com/docs/books/jls [...] tml#290293

Reply

Marsh Posté le 09-10-2002 à 16:42:47    

lorill a écrit a écrit :

 
 
Oui. Je trouves ca aberrant que ca ne marche pas, même apres avoir lu la spec. http://java.sun.com/docs/books/jls [...] tml#290293



euh et à quoi va ressembler l'instance de la ClasseDeTonCul comme ça :heink:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 09-10-2002 à 16:44:14    

Citation :

uses the boolean value of one expression to decide which of two other expressions should be evaluated


 
EVALUER.
le pb ne se situe pas au niveau de l'expression elle mais au moment ou tu veux assigner une instance de Long à une variable de type String par exempe
String s = new Long("334" )
ça marchera jamais ça hein...


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 09-10-2002 à 16:48:26    

--greg-- a écrit a écrit :

euh et à quoi va ressembler l'instance de la ClasseDeTonCul comme ça :heink:




Code :
  1. class UneDate extends java.util.Date
  2. {
  3. }
  4. class AutreDate extends java.util.Date
  5. {
  6. }
  7. Date d = (pika == null) ? new UneDate() : new AutreDate();


 
ben la je vois pas comment tu justifies le fait que ce soit illégal.

Reply

Marsh Posté le 09-10-2002 à 16:49:02    

--greg-- a écrit a écrit :

Citation :

uses the boolean value of one expression to decide which of two other expressions should be evaluated


 
EVALUER.
le pb ne se situe pas au niveau de l'expression elle mais au moment ou tu veux assigner une instance de Long à une variable de type String par exempe
String s = new Long("334" )
ça marchera jamais ça hein...




 
celui la tu l'effaceras pas :)

Reply

Marsh Posté le 09-10-2002 à 16:53:39    

lorill a écrit a écrit :

 

Code :
  1. class UneDate extends java.util.Date
  2. {
  3. }
  4. class AutreDate extends java.util.Date
  5. {
  6. }
  7. Date d = (pika == null) ? new UneDate() : new AutreDate();


 
ben la je vois pas comment tu justifies le fait que ce soit illégal.



là je suis d'accord :o


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 09-10-2002 à 16:54:34    

lorill a écrit a écrit :

 
 
celui la tu l'effaceras pas :)



et? j'ai dit une connerie?
Dans ton cas tu voulais assigner un Long(toto) ou une String("" ) sur à une meme variable je te rappelle :o


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 09-10-2002 à 16:56:27    

lorill a écrit a écrit :

Et pourtant  
System.out.println( (toto!=null) ? new Long(0) : toto); //ok
 
crotte. Pourquoi ?: demande que les deux opérandes soient du même type ?




En C++ c'est la même chose.
L'opérateur ternaire ? : doit renvoyer un objet d'un type bien défini. Or si tu écris toto != null ? "" : toto, ça renvoit quoi comme type ? Object ? Ca serait bizarre...
 
De toute manière, tu as rarement besoin d'avoir 2 objets de type différents de chaque côté du ":". Et si c'est cela que tu veux, le compilateur t'impose juste de lui dire que c'est effectivement cela que tu veux : toto != null ? (Object) "" : (Object) toto.
 
Le typage fort, ça permet juste une vérification automatisée de la cohérence d'une ligne de code, histoire de ne pas pouvoir ajouter des carottes à des bananes. Et désolé, mais on n'a pas trouvé beaucoup mieux pour limiter le nombre de bugs dans un programme...

Reply

Marsh Posté le 09-10-2002 à 16:56:43    

Citation :

et? j'ai dit une connerie?


T'as surtout été a coté de la plaque
 

Citation :

Dans ton cas tu voulais assigner un Long(toto) ou une String("" ) sur à une meme variable je te rappelle :o


oui, a une variable de type Object. Quel crime !


Message édité par lorill le 09-10-2002 à 16:57:35
Reply

Marsh Posté le 09-10-2002 à 17:00:29    

lorill a écrit a écrit :

Citation :

et? j'ai dit une connerie?


T'as surtout été a coté de la plaque
 

Citation :

Dans ton cas tu voulais assigner un Long(toto) ou une String("" ) sur à une meme variable je te rappelle :o


oui, a une variable de type Object. Quel crime !



 [:biscuiteur] :fou:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 09-10-2002 à 17:01:31    

BifaceMcLeOD a écrit a écrit :

 
Le typage fort, ça permet juste une vérification automatisée de la cohérence d'une ligne de code, histoire de ne pas pouvoir ajouter des carottes à des bananes.  




 
Typage fort différent de statique :
C - typage faible et statique
Java, C++ - typage fort et statique
Python, Ruby - typage fort et dynamique.
 
Bon, je pense que tu le sais très bien, mais bon.

Reply

Marsh Posté le 09-10-2002 à 17:10:01    

Oui, mais le typage statique permet une exécution nettement plus rapide.
Ceci dit, Java offre aussi le support du typage dynamique, avec la Reflection API.
 
Note : on pourrait aussi ajouter "Ada" dans les langages à typage archi-fort statique, et "SmallTalk" dans les langages à typage fort et dynamique.


Message édité par BifaceMcLeOD le 09-10-2002 à 17:11:31
Reply

Marsh Posté le 09-10-2002 à 23:29:00    

lorill a écrit a écrit :

 

Code :
  1. class UneDate extends java.util.Date
  2. {
  3. }
  4. class AutreDate extends java.util.Date
  5. {
  6. }
  7. Date d = (pika == null) ? new UneDate() : new AutreDate();


 
ben la je vois pas comment tu justifies le fait que ce soit illégal.




nop. C'est logic aussi que ca marche pas : UneDate ne peux pas être converti en AutreDate et inversement. C'est donc tout a fait en cohérence avec la doc java :  

Citation :

If the second and third operands are of different reference types, then it must be possible to convert one of the types to the other type (call this latter type T) by assignment conversion (§5.2); the type of the conditional expression is T. It is a compile-time error if neither type is assignment compatible with the other type.  


 
Le problème c'est que le compilo cherche à déterminer le type de l'expression "a?b:c". Il ne tient pas compte de ce que tu vas en faire (en l'occurence, l'assigner une variable de type compatible avec b et c). par contre, tu peux faire ca :  
 

Code :
  1. Date d = (pika == null) ? (Date) new UneDate() : (Date)new AutreDate();

Reply

Marsh Posté le 10-10-2002 à 07:22:01    

j'ai bien compris ce que ca faisait, mais ca me surprend comme comportement. Mais en fait c'est logique, il est obligé de faire comme ca pour vérifier la validité du type a la compilation.

Reply

Marsh Posté le 10-10-2002 à 09:19:59    

lorill a écrit a écrit :

j'ai bien compris ce que ca faisait, mais ca me surprend comme comportement. Mais en fait c'est logique, il est obligé de faire comme ca pour vérifier la validité du type a la compilation.




ouep  :jap:

Reply

Marsh Posté le 10-10-2002 à 11:50:59    

:kaola:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 10-10-2002 à 11:58:57    

--greg-- a écrit a écrit :

 :kaola:  




Qu'est-ce qu'il t'arrive encore ? C'est pas parce que je comprends que j'approuve  :o

Reply

Marsh Posté le 10-10-2002 à 12:14:06    

lorill a écrit a écrit :

 
Qu'est-ce qu'il t'arrive encore ? C'est pas parce que je comprends que j'approuve  :o  



:heink:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 10-10-2002 à 12:15:51    

:na:

Reply

Marsh Posté le 10-10-2002 à 12:35:41    

[:cupra]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed