Feelin : Soumission de syntaxe

15 sujets de 1 à 15 (sur un total de 53)

  • Gofromiel

    • Messages : 460
    #4838

    Hmm. J’essaie tant bien que mal de rendre les choses le plus simple et rapide pour programmer. Depuis peu j’ai crée une macro ‘$’ pour remplacer ‘IFEELIN F_Do()’.

    Ainsi on tape : $(Obj, « Add », 1, 2, 3);

    à la place de : IFEELIN F_Do(Obj, (uint32) « Add », 1, 2, 3);

    Sous GoldEd, j’ai donné de belles couleurs à ‘$’ et ‘Obj’, on ne peut pas les manquer. L’idéal serait évidement de taper « Obj->Add(1, 2, 3) » mais c’est pas possible.

    Votre avis ??

    Rmais96

    • Messages : 95
    #83850

    Salut,

    Et si tu encapsulais ce type d’appels dans une classe qui offre les methods telles que Add(…) et « wrappe » l’appel Object->Add(…) vers F_Do(Obj, « Add », …) ?

    L’utilisateur n’aurait qu’à instancier un objet de cette classe au lieu d’un object BOOPSI (lui-même instancié par le constructeur de la classe).

    Il faudrait aussi bien penser les conditions de destruction de l’objet qui ne doit être effectué par la classe que si l’objet n’est pas devenu le fils d’un autre objet.

    Mais ceci ne serait compatible qu’avec un compilateur C++, bien évidemment.

    A plus.

    leo

    • Messages : 3518
    #83851

    L’idéal serait évidement de taper « Obj->Add(1, 2, 3) » mais c’est pas possible.

    Pourquoi ? Ca paraît pratique le C++ pour faire de l’objet quand même :)

    @+,

    Léo.

    Gilloo

    • Messages : 831
    #83852

    M’enfin c’est quoi ces macros dignes de µ$?

    Dans ma boite on (le système qualité iso9001 et consorts) a proscrit les macros et l’ingénu qui en fait est systématiquement mis à pied ;-) et interdit de toucher au code.

    Bah si c’est du C (sisi on peut faire de la programmation objet en C!)

    mabelleclasse *obj ;

    obj = Newmabelleclasse() ;

    if (obj != NULL)

    {

    obj->Add(obj, 1, 2, 3) ; /* c’est pas glorieux… */

    Freemabelleclasse(obj) ;

    }

    du C++:

    mabelleclasse *obj = new mabelleclasse() ;

    if (obj != NULL)

    {

    obj->Add(1, 2, 3) ;

    delete obj ;

    }

    Vous remarquerez que j’ai mis ceinture + bretelles pour tester le pointeur… un petit if vaut mieux qu’une grosse exception.

    :-D

    Pour en savoir plus, je passe ce lien:

    http://chgi.developpez.com/c/objet/

    Ca va peut être en barber plus d’un, mais c’est en français.

    Yomgui

    • Messages : 1589
    #83853

    Olivier: si tu peux éviter des syntaxes aussi cryptiques que le perl cela serait chouette…

    centaurz

    • Messages : 293
    #83854

    +1, stop à l’invasion des maquereaux ! Imagine le debug avec ce genre de syntaxe 😮

    Sinon effectivement tu n’as jamais pensé à refaire tes classes en C++, un système de GUI natif Amiga en C++ ça serait vraiment novateur :-)

    Evidemment pour le côté dynamique ce serait plus trop le top (j’imagine qu’on peut pas stocker des classes C++ dans une library)

    Alex

    • Messages : 1025
    #83855

    Moi j’aime bien l’idée de Gilloo des pointeurs de fonctions embarqués dans la structure qui donne l’impression de faire de l’objet (c’est d’ailleurs un peu l’idée des Interfaces de l’AOS4).

    En avoir des macros qui s’appelle ‘$’ c’est pas hyper cool pour le débutant qui n’y comprend rien. Perso je préfère écrire avoir une macro dont le nom est plus long mais compréhensible.


    @centaurz

    Si tu peut mettre des classes C++ dans une library mais par contre faut faire un wrapper C++->C pour l’extérieur. Du coup si tu veux retrouver ton objet de l’autre côté (client) bhein faut faire un wrapper C->C++… Pas trés intéressant à écrire mais doit y avoir moyen d’automatiser tout ça…

    Gofromiel

    • Messages : 460
    #83856

    Aïe. Bon tant pis pour ‘$’. Comme quoi, j’ai bien fais de soumettre l’idée avant de la mettre en pratique ;-)

    Sinon, l’idée des fonctions dans une structure pourrait sembler sympathique, le problème c’est que les structures de Feelin sont opaques, que les méthodes sont dynamique et que quand on appelle ‘Obj->Add() » il faudrait faire tout un paquet d’interface pour que ‘Add()’ récupère ‘Obj’. Ce qui ne pose pas de problème dans une bibliothèque pour OS4 puisque la structure de la bibliothèque est disponible dans un symbole global, cela n’a rien à voir avec un objet.

    Damned ! C’est la faute de mootools et leur API particulière, qui me donne plein d’idées étranges.

    Dommage, c’était pas si moche.

    Gofromiel

    • Messages : 460
    #83857

    Hmm, à la réflection – même si cela n’a plus grand chose à voir – je pourrait ajouter une méthode ‘GetMethodFunction()’ à la classe ‘Class’ qui renverrait la fonction appelée pour une méthode particulière. Puisque Feelin n’utilise pas de dispatcher on pourrait ainsi obtenir un tableau de fonctions particulier à chaque situation.

    Ainsi, au lieu d’obtenir les identifiants numériques des méthodes, on aurait directement la fonction à appeler.

    Après, le problème c’est la sécurité. Parce qu’on peut passer n’importe quoi à F_DoA() sans risquer grand chose alors qu’appeler un pointeur qui n’existe plus n’aura pas les mêmes conséquences ;-) En même temps, puisque ce serait des fonctions créées par des super classes, on risque pas de les voir disparaitre…

    Gilloo

    • Messages : 831
    #83858

    Sinon, l’idée des fonctions dans une structure pourrait sembler sympathique, le problème c’est que les structures de Feelin sont opaques, que les méthodes sont dynamique et que quand on appelle ‘Obj->Add() » il faudrait faire tout un paquet d’interface pour que ‘Add()’ récupère ‘Obj’. Ce qui ne pose pas de problème dans une bibliothèque pour OS4 puisque la structure de la bibliothèque est disponible dans un symbole global, cela n’a rien à voir avec un objet.

    Jette un oeil ici:

    http://chgi.developpez.com/c/heritage/

    Tu peux très bien imaginer une classe (euh pardon une structure puisque l’on est en C) qui a un pointeur sur ton objet opaque et la méthode Add (un pointeur sur la fonction Add)…

    /me ne comprends pas bien le concept de méthode dynamique…

    Dans ce cas il te suffirait p’tet que d’une seule fonction

    obj->DoIt(« Add », 1, 2, 3) mais on en revient au point de départ…

    Damned ! C’est la faute de mootools et leur API particulière, qui me donne plein d’idées étranges.

    C’est pas bien de copier ce que les autre font :-D

    leo

    • Messages : 3518
    #83859

    /me repose sa question, puisqu’elle est restée sans réponse ;)

    Qu’est-ce qui empêche d’avoir une API c++ pour Feelin ? (et plus généralement: n’importe quelle application)


    @Gofromiel
    : et encore, t’as pas testé jQuery ;)

    corto

    • Messages : 1129
    #83860

    Gofromiel a écrit :

    Damned ! C’est la faute de mootools et leur API particulière, qui me donne plein d’idées étranges.

    Dommage, c’était pas si moche.

    Je ne crois plus que ce soit nécessaire mais … évite $ comme nom de macro, privilégie aussi la lisibilité, ça paie toujours. Comme dit Yomgui, on est pas en Perl ! Quand à mootools, désolé mais j’ai vu « framework Javascript », je ne suis pas allé plus loin.

    leo

    • Messages : 3518
    #83861

    Quand à mootools, désolé mais j’ai vu « framework Javascript », je ne suis pas allé plus loin.

    Bein t’aurai dû :)

    sinisrus

    • Messages : 2330
    #83862

    Depuis que feelin existe je n’ai pas vu un seul soft qui l’utilise mais j’aimerai vraiment beaucoup voir ce que cela donne

    centaurz

    • Messages : 293
    #83863

    @leo

    Qu’est-ce qui empêche d’avoir une API c++ pour Feelin ? (et plus généralement: n’importe quelle application)

    Ben… à par l’incompatibilité avec une library Amiga, il y toutes les bricoles en C qui te permettent d’avoir des classes évolutives avec des propriétés et des méthodes « dynamiques », via des tag-lists… Ceci dit ce qu’on gagnerait en syntaxe et en gestion d’erreurs avec le C++ vaut peut-être le coup…

15 sujets de 1 à 15 (sur un total de 53)

  • Vous devez être connecté pour répondre à ce sujet.

Forums AmigaOS, MorphOS et AROS Développement Feelin : Soumission de syntaxe

Do NOT follow this link or you will be banned from the site!