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

Discussion :

Ceylon - Partie 3 : Typage


Sujet :

Autres Java

  1. #1
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 894
    Points : 7 208
    Points
    7 208
    Par défaut Ceylon - Partie 3 : Typage
    Bonjour à tous,


    Je vous propose de poursuivre la découverte du langage Ceylon. Cette troisième partie présente l'un des points clés du langage, son système de typage : http://lmauzaize.developpez.com/tuto...ceylon/typage/

    Toutes les remarques et suggestions sont naturellement les bienvenues.


    Vous pouvez retrouver les articles précédents :
    1. Ceylon - Partie 1 : Présentation & installation
    2. Ceylon - Partie 2 : Concepts de base



    Bonne lecture !
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  2. #2
    Membre éclairé

    Inscrit en
    juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    Pour l'exemple du switch (III-A), je suppose qu'il y a des problèmes de concurrence si la variable est déclarée shared? Mais dans la déclaration je ne vois pas shared. Peux-tu expliquer?

    Pourquoi n'est-il pas possible d'étendre un type déclaré avec le mot-clef alias, il semble que ce serait utile?

    Je n'ai pas compris ce passage:
    L'inférence de type dans Ceylon consiste simplement à omettre le type, d'une référence ou de retour d'une fonction, si :
    * celle-ci (la référence ou la fonction) n'est pas exposée, le langage suppose que cela fait alors partie d'une API
    Pour moi, la référence ou fonction fait partie d'une API si elle est exposée, donc tout a fait le contraire de ce qui est écrit.

    Dans ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class GeneriqueTypeOptionnel<PremierType=String>() {}
    GeneriqueTypeOptionnel generiqueTypeOptionnel = GeneriqueTypeOptionnel<String>();
    Est-ce que GeneriqueTypeOptionnel tout seul est automatiquement remplacé par GeneriqueTypeOptionnel<String>? Si c'est le cas on ne peut pas faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GeneriqueTypeOptionnel generiqueTypeOptionnel = GeneriqueTypeOptionnel<BougliBougla>();
    N'est-ce pas?

    Il semble que "object" déclare un singleton, c'est bien ça?

    Dans IV-C, il est dit que hériter de la même interface avec des paramètres génériques differents n'est possible que "si, et seulement si le type est covariant"
    mais c'est suivi d'un exemple avec des types contravariants, j'ai du mal à suivre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class ConsommateurAetB() satisfies ConsommateurA & ConsommateurB
    Que signifient + et * dans ces déclarations?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {Object+} liste
    {Noeud*} noeuds
    J'ai remarqué des fautes d'orthographe dans l'article, par exemple "qu'elle est le type exact"...

    Dans la section III-A, je suppose que variableUnion réfère à demoUnion déclaré au-dessus?

  3. #3
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 894
    Points : 7 208
    Points
    7 208
    Par défaut
    Citation Envoyé par bredelet Voir le message
    Pour l'exemple du switch (III-A), je suppose qu'il y a des problèmes de concurrence si la variable est déclarée shared? Mais dans la déclaration je ne vois pas shared. Peux-tu expliquer?
    Tant que la référence n'est pas variable il n'y a aucun soucis. Le fait qu'elle soit "shared" ou pas ne change rien dans ce cas.

    Citation Envoyé par bredelet Voir le message
    Pourquoi n'est-il pas possible d'étendre un type déclaré avec le mot-clef alias, il semble que ce serait utile?
    Je ne suis pas le concepteur du langage, je ne pourrais donc pas répondre à cette question. Pose-la directement à Gavin King sur le forum.
    Avec la sortie de la 1.1, il est possible que les choses aient évolué.

    Citation Envoyé par bredelet Voir le message
    Pour moi, la référence ou fonction fait partie d'une API si elle est exposée, donc tout a fait le contraire de ce qui est écrit.
    Effectivement c'est très mal dit. Ce que je voulais dire, c'est que si un élément est exposé, il fait alors partie d'une API et l'inférence sera interdite.

    Citation Envoyé par bredelet Voir le message
    Si c'est le cas on ne peut pas faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GeneriqueTypeOptionnel generiqueTypeOptionnel = GeneriqueTypeOptionnel<BougliBougla>();
    N'est-ce pas?
    Effectivement cela n'est pas possible. Pour omettre le type paramétré, il faut que ce soit le type par défaut.

    Citation Envoyé par bredelet Voir le message
    Il semble que "object" déclare un singleton, c'est bien ça?
    Effectivement, mais au delà du simple singleton, un "object" est aussi une définition de classe. Alors qu'un singleton en Java sera simplement une instance unique de la classe à laquelle il appartient. Les deux sont décorrélés.
    Ce qui pose d'ailleurs des problèmes dans la gestion des énumérations dans la version 1.0 de Ceylon.

    Citation Envoyé par bredelet Voir le message
    Dans IV-C, il est dit que hériter de la même interface avec des paramètres génériques differents n'est possible que "si, et seulement si le type est covariant"
    mais c'est suivi d'un exemple avec des types contravariants, j'ai du mal à suivre:
    Effectivement, le problème ce n'est pas qu'ils soient covariants ou contravariants mais qu'ils ne soient pas "invariants".

    Citation Envoyé par bredelet Voir le message
    Que signifient + et * dans ces déclarations?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {Object+} liste
    {Noeud*} noeuds
    Il s'agit de séquences. Elles seront abordées dans le chapitre "V. Collections".

    Citation Envoyé par bredelet Voir le message
    Dans la section III-A, je suppose que variableUnion réfère à demoUnion déclaré au-dessus?
    Effectivement, il s'agit d'un problème dans le premier exemple (Voir le code source sous GitHub)

    Encore merci pour toutes tes remarques, je ne manquerai pas de corriger l'articles dans les jours qui viennent.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  4. #4
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 894
    Points : 7 208
    Points
    7 208
    Par défaut
    Je te remercie pour ces remarques ! L'article a été mise à jour.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

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