Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2016-11-05 20:13:58 Comment fonctionne cette ligne : Obj = (Class[]) append (Obj, this)

Nitiel
nouveau membre
Date d'inscription: 2016-11-05
Messages: 6

Comment fonctionne cette ligne : Obj = (Class[]) append (Obj, this)



Bonjour !!

Ci-dessous un bout de code que je ne comprends pas très bien à cause cette ligne :

feuilles = (feuille[]) append(feuilles, this);

et notamment ce morceau :

(feuille[])

Que vient faire ce morceau indispensable ? Pourquoi cela ne marche pas sans ?

Au vu des résultats, je dirais que cela s'occupe, à chaque nouvel objet instancié, d'ajouter sa référence de nature StringBuffer dans un tableau, mais sans comprendre comme ça marche à cause de ce truc là : (feuille[]).

Hâte de lire vos éclairements !! Nicolas.

Voici le code en entier :

feuille[] feuilles;

void setup() {
  feuilles = new feuille[0];
  new feuille();
  new feuille();
  new feuille();
}

void draw() {
}

class feuille {
  feuille() {
    feuilles = (feuille[]) append (feuilles, this);
    println(feuilles);
  }
}

et les résultats :

> sketch_161105a$feuille@126ecb28
> sketch_161105a$feuille@126ecb28 sketch_161105a$feuille@576c5701
> sketch_161105a$feuille@126ecb28 sketch_161105a$feuille@576c5701 sketch_161105a$feuille@7a55b9d4

Dernière modification par Nitiel (2016-11-05 20:15:26)

Hors ligne

 

#2 2016-11-05 21:49:58 Re : Comment fonctionne cette ligne : Obj = (Class[]) append (Obj, this)

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Comment fonctionne cette ligne : Obj = (Class[]) append (Obj, this)



Bonsoir,

C'est une opération de transtypage. Comme proposée ci-dessous :

int a = 1000;
byte b = (byte)a;
println(b);

Dans ton code, il faut s'assurer que le fait d'ajouter un élément dans ton tableau reste bien un tableau.
Si tu souhaites avoir d'autres explications va regarder ici :
https://fr.wikibooks.org/wiki/Programma … _explicite

Remarque : Le code que tu as du recopier, n'est pas joli, joli. Il ne faut pas prendre exemple sur cette manière de programmer.
D'une part il ne vaut mieux pas utiliser de variable globale directement dans une classe,. Une classe a pour objectif d'être indépendante et réutilisable par d'autres.
De plus cette manière d'ajouter de nouveaux éléments ne me paraît pas propre du tout.

Hors ligne

 

#3 2016-11-08 17:24:25 Re : Comment fonctionne cette ligne : Obj = (Class[]) append (Obj, this)

Nitiel
nouveau membre
Date d'inscription: 2016-11-05
Messages: 6

Re: Comment fonctionne cette ligne : Obj = (Class[]) append (Obj, this)



Merci !! Je pense avoir saisi le transtypage.

Mais maintenant, je ne comprends plus la fonction « append(byte[], byte) » parce qu’elle semble différente de la méthode qui s’appelle avec le type StringBuffer, notamment par ses arguments en entrées : un tableau de byte dans lequel est ajouté le byte passer en second argument.

Déjà à quoi sert le « feuilles » en argument dans append(), alors qu’il y a aussi un « feuilles = » en début de ligne ? Cela signifie-t-il que « append » n’est pas pas une méthode, mais une fonction qui retourne un nouveau tableau en byte ? Tableau qui est ensuite converti en feuille[] afin d’être ajouté à la variable globale de ce type-là ? Cela remplace-t-il son contenu (parce que j’ai un doute depuis avoir lu des choses à propos du transtypage) ?

feuilles = (feuille[]) append(feuilles, this);

C’est un extrait de code que m’a écrit en quelques minutes un prof de programmation multimédia sans m’en dire plus, afin de me montrer comment lui s’y prendrait pour reproduire en 2D la chute de feuilles sans utiliser une sorte de système physique. Pour la variable globale dans une classe, je m’en doutais aussi, pour le reste, je suis étonné, après je préfère utiliser d’autres manières que je trouve plus simple, et utiliser un ArrayList qui me rappelle un peu de la souplesse des tableaux en Python.

Dernière modification par Nitiel (2016-11-08 17:26:56)

Hors ligne

 

#4 2016-11-10 22:23:13 Re : Comment fonctionne cette ligne : Obj = (Class[]) append (Obj, this)

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Comment fonctionne cette ligne : Obj = (Class[]) append (Obj, this)



Pour append() regarde la documentation pour bien comprendre :
https://processing.org/reference/append_.html
Append est une méthode qui renvoie un tableau qui est la concaténation des deux entités passées en paramètres.
Dans ce cas présent, s'agit juste d'ajouter un élément.

Il faut imaginer qu'un tableau a une taille constante.
Si on ne connaît pas la taille d'un tableau et/ou si celle-ci évolue dans le temps, il est nettement préférable d'utiliser les ArrayList qui sont fait pour cela.

Hors ligne

 

#5 2016-11-15 13:13:59 Re : Comment fonctionne cette ligne : Obj = (Class[]) append (Obj, this)

Nitiel
nouveau membre
Date d'inscription: 2016-11-05
Messages: 6

Re: Comment fonctionne cette ligne : Obj = (Class[]) append (Obj, this)



Merci. Pour la méthode append, j'avais complètement oublié de pensée aux références de Processing. C'est le fonctionnement que j'en avais déduit.

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024