IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Equivalent de "#define" en Java


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Equivalent de "#define" en Java
    Bonjour,

    je veux déclarer un grand nombre de variables avec un type primitif donné, mais je veux pouvoir changer le type facilement. En C je ferais quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #define mtype long
     
    private mtype var1
    private mtype var2

    Pour changer le type il suffit de modifier le #define.
    Comment faire la même chose en java où je n'ai pas vu d'équivalent au #define ?

  2. #2
    Membre éprouvé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 510
    Points : 1 007
    Points
    1 007
    Par défaut
    Bonjour zigmo

    en effet, le #define n'existe pas en java. Le java ne fait pas de compilation conditionnelle.

    A ma connaissance, on ne peut pas le faire, et est ce que cela est vraiment utile, je n'en suis pas convaincu.

    Bonne nuit

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    On peut obtenir la même chose avec les types objets, avec un simple pattern factory, par contre.
    Mais avec les types de base, c'est bien trop lourd, en effet.

    Mais pour des types de base, je dois bien dire que je ne vois pas bien l'intérêt, moi non plus.

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par thelvin Voir le message
    Mais pour des types de base, je dois bien dire que je ne vois pas bien l'intérêt, moi non plus.
    +1

    Qu'essayes-tu de faire exactement ?

    a++

  5. #5
    Membre averti Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par bpy1401 Voir le message
    est ce que cela est vraiment utile, je n'en suis pas convaincu.
    C'est même le gros avantage de java d' avoir des variables bien typées.
    Quand on récupère un int, on récupère un int, on est sur que ça va se transformer après en double (pas comme en php ou javascript ).

    Et je vois dans aucun cas l'intérêt non plus, si ce n'est de s'embrouiller et paumer le type de base à un moment donné

    Tiens, on en avait déjà parlé...

  6. #6
    Membre du Club
    Profil pro
    Architecte logiciel
    Inscrit en
    Janvier 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 28
    Points : 48
    Points
    48
    Par défaut
    pour ton cas eventuellement passe par le templating

    avec eventuellement les variable en protected pour faire ce que tu veux dans les classe en heritant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Toto<mtype  extends Number>
    {
    protected mtype a;
     
    public mtype getA()
    {
    return a;
    }
    }
    --------------
    avec eventuellement une definition statique de la casse correctement typée,
    tu peux alors faire des cochoneries comme en c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class TotoLong extends Toto<Long>
    {
    public long totoMethod(long y)
    {
      long x = y * a;
    return x;
    }
     
    }
     
    }

    neanmoins c'est quand meme étrange d'avoir ce besoin en java

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    C'est simplement qu'entre un proto et la version finale les spécifications changent et qu'il peut être nécessaire de changer pour un type offrant par exemple une plus grande résolution ou de meilleures performances.
    Le #define en C/C++ est juste du traitement de texte effectué par le préprocesseur sur le code, et on peut lui trouver plein d'autres applications.

    Je suis d'accord que ce n'est pas indispensable, c'est juste une facilité, et comme je débute en java je me demandais si on avait quelque chose de ressemblant.

    En tous cas merci pour vos réponses et pour le temps que vous y avez consacré.

  8. #8
    Membre averti Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par fallo Voir le message
    tu peux alors faire des cochoneries comme en c
    Mouais la grande différence vient du fait que la poo et notamment java est fortement typée, et permet de construire des objets à la chaine, avec le principe de l'héritage et du polymorphisme, ça évite de se prendre la tête...
    (oui je sais vous allez me dire que c'est faisable en c, et je vous répondrai que vous avez raison, mais java reste plus propre et plus rapide là-dessus).

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fallo Voir le message
    pour ton cas eventuellement passe par le templating
    Ce n'est pas des "Templates" mais des "Generics". Ce n'est pas exactement la même chose... (pour plus d'infos : Les Generics ne sont pas des Templates comme les autres !

    Au passage cela ne permet pas de manipuler les types primitifs (contrairement à ton exemple).


    Citation Envoyé par zigmo Voir le message
    C'est simplement qu'entre un proto et la version finale les spécifications changent et qu'il peut être nécessaire de changer pour un type offrant par exemple une plus grande résolution ou de meilleures performances.
    Tu pourrais préciser ton besoin avec un exemple ?


    Citation Envoyé par zigmo Voir le message
    Le #define en C/C++ est juste du traitement de texte effectué par le préprocesseur sur le code, et on peut lui trouver plein d'autres applications.
    Les #define servent surtout à gérer du code portable... Java n'a pas de tel problème


    a++

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Tu pourrais préciser ton besoin avec un exemple ?
    Par exemple tu peux commencer un proto en utilisant des double pour être sûr de couvrir les besoins pas encore complètement spécifiés, puis, si les besoins en résolution le permettent, changer pour des float pour réduire les temps de calcul.

    Mais ma question allait bien au-delà de cet exemple. Je fais toujours en sorte d'anticiper les éventuelles modifications et de les rendre faciles à implémenter.

  11. #11
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    Je fais toujours en sorte d'anticiper les éventuelles modifications et de les rendre faciles à implémenter.
    Justement, dans ce domaine, la programmation orientée objet va bien plus loin que le C.

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Citation Envoyé par zigmo Voir le message
    Par exemple tu peux commencer un proto en utilisant des double pour être sûr de couvrir les besoins pas encore complètement spécifiés, puis, si les besoins en résolution le permettent, changer pour des float pour réduire les temps de calcul.

    Mais ma question allait bien au-delà de cet exemple. Je fais toujours en sorte d'anticiper les éventuelles modifications et de les rendre faciles à implémenter.
    En fait, c'est effectivement un exemple convainquant d'un besoin de ce genre, j'y ai en effet pensé, en cachette, quand tu as posé ta question. Je le sais pour avoir rencontré ce cas moi-même, et j'ai eu une fois à remplacer plein de double par des float. Beurk.

    Mais, c'est bien le seul exemple que je puisse imaginer.
    - Avec les autres types de bases :
    -- ou bien il y en a un et un seul qui répond au besoin, changer ça c'est changer la nature du besoin.
    -- ou bien la différence entre l'un et l'autre (int ou short, int ou long...) n'a pas vraiment d'importance et ce n'est pas la peine d'y passer plus de temps.

    - Avec autre chose que les types de base, un pattern factory fait très bien l'affaire.

    => Seule la différence float/double, dans les cas où les float sont effectivement acceptables et éventuellement préférables, lève ce problème.

    Mais je confirme qu'il est chiant. Java n'est pas très adapté à ce genre de calcul intensif. Il y a aussi les accès aux tableaux, qui sont plus lents qu'en C.

  13. #13
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    Pour faire ça facilement, il faut définir une classe contenant la valeur et les accesseurs, ensuite il n'y a qu'un mot à changer. Ce qui permet ensuite non seulement de passer de float à double ou l'inverse, mais de compliquer bien plus, genre lire la valeur sur un capteur, en ne devant modifier que dans l'objet...

    De toutes façons, il y a toujours moyen de dire "double toto, tata, riri ;" pour ne devoir changer qu'un mot.

    Cela dit, avec un traitement de texte simple, il est assez facile de remplacer tous les "float" par des "double", donc c'est peut-être un problème assez marginal, tout ça, non ?

  14. #14
    Membre averti Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par BenWillard Voir le message
    Cela dit, avec un traitement de texte simple, il est assez facile de remplacer tous les "float" par des "double", donc c'est peut-être un problème assez marginal, tout ça, non ?
    Et oui merci le Ctrl+f Find double & Replace with float, Replace All et hop c'est fini...

  15. #15
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par Drakiss Voir le message
    Et oui merci le Ctrl+f Find double & Replace with float, Replace All et hop c'est fini...
    Sauf que je suppose que dans leur cas, c'est plutôt remplacer tout les double qu'ils avaient taguer comme étant "A changer" et non tout les double de l'application entièrement.

  16. #16
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Oui, mais :

    Citation Envoyé par BenWillard Voir le message
    Pour faire ça facilement, il faut définir une classe contenant la valeur et les accesseurs, ensuite il n'y a qu'un mot à changer. Ce qui permet ensuite non seulement de passer de float à double ou l'inverse, mais de compliquer bien plus, genre lire la valeur sur un capteur, en ne devant modifier que dans l'objet...
    Coût d'accès et de mémoire abominables, or les seules raisons de préférer float à double, c'est l'occupation mémoire et le temps de traitement.

    Citation Envoyé par BenWillard Voir le message
    De toutes façons, il y a toujours moyen de dire "double toto, tata, riri ;" pour ne devoir changer qu'un mot.
    Ça ne changera pas les déclarations de méthodes, ni de variables locales à chaque.

    Citation Envoyé par BenWillard Voir le message
    Cela dit, avec un traitement de texte simple, il est assez facile de remplacer tous les "float" par des "double", donc c'est peut-être un problème assez marginal, tout ça, non ?
    Sans doute vrai en pratique, c'est ce que j'avais fait moi . Mais en théorie, il pourrait très bien y avoir un type "changeant" de float à double suivant les préférences, et des types "constants", qui restent float ou double quel que soit ce qu'est le type changeant. Dans ce cas, ça ne marcherait pas.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Eh oui, seules certaines variables sont à changer, ce serait trop simple !

    Merci à tous pour vos réponses et vos idées.

  18. #18
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    Il suffit peut-être d'ajouter un truc genre "/**/" avant chaque "float" remplaçable....?

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par BenWillard Voir le message
    Il suffit peut-être d'ajouter un truc genre "/**/" avant chaque "float" remplaçable....?
    ...ou bien affubler les variables en question d'un préfixe. Il y a plein de possibilités.

    En réalité, comme je découvre Java, je voulais juste savoir s'il existait un mécanisme similaire au #define. La réponse est non. Alors on fera sans...

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo