Accueil Forum -> Communauté -> Présentation  >>  Présentation devjava
16 messages
Accueil Forum -> Communauté -> Présentation  >>  Présentation devjava
16 messages

Présentation devjava

20 décembre 2013 à 15:01 devjava  
1) Ton pseudo , d'où viens t'il ?

Je développe en java

2) D'où viens-tu ?

je tourne en rond

3) Mac ou PC ?

Les macs font de très bons presse-papiers

4) Comment as tu connu entre-geeks ?

Publicité sur un site pour adultes

5) Où vas-tu ?

Non

6) Qu’est ce qui te défini en tant que geek ?

Temps passé sur PC > Temps passé avec des gens

7) Slip ou caleçon ?

Bleu

9) Passion pour les jeux ? Si oui, donne 3 jeux favoris + jeu du moment. Pc ou console ? console favorite ?

LoL. En attente de Dragon age, witcher et project eternity

10) Son goku ou Superman ?

Non

12) Que fais tu dans la vie ?

Fin cursus ingénieur

13) La 13éme question…

42

14) Le matin, ptit dej ? pain de cake ? céréales ?

Complètement d'accord


17) IE ou firefox ?

What year is it?

18) Couleur favorite ?

Bière blanche

19) Ne trouve tu pas ces questions stupides et inutiles ?

4000

21) Combien y'a t'il de poire dans une bonne tarte aux pommes ?

rouge

22) Si tu etais seul(e) au monde sur une île perdu, quel objet choisirais tu en priorité pour passer le temps?

WILSON


Message édité le 2013-12-20 15:05:00 par devjava

Présentation devjava

20 décembre 2013 à 15:16 Cookie  

a écrit:
4) Comment as tu connu entre-geeks ?

Publicité sur un site pour adultes




À noter que ça aurait pu être marrant si le reste de la présentation était sérieux

Bienvenue quand même

Présentation devjava

20 décembre 2013 à 15:27 Notsu      
Fourchette

Présentation devjava

20 décembre 2013 à 17:15 bontiv  
La petite question que je pose toujours aux développeurs java ...

Tu est plutôt :

String concate(a, b){
StringBuilder sb = new StringBuilder(a);
sb.append(b);
return sb.toString();
}

ou

String concate(a, b){
return a + b;
}

Présentation devjava

25 décembre 2013 à 20:58 devjava  
Bonsoir!

La première. Quand on fait quelque chose, faut le faire élégamment.

Présentation devjava

25 décembre 2013 à 21:01 bontiv  
Je t'aime bien ^^

Présentation devjava

25 décembre 2013 à 22:08 Nightmare  
Je vois pas trop l'intérêt d'utiliser StringBuilder si c'est pour la concaténation de 2 chaînes seulement. Là où StringBuilder devient vraiment intéressant, c'est lorsqu'on a besoin de concaténer des chaînes dans un gros tableau par exemple.
Je proposerai d'utiliser plutôt le "+", si un autre développeur reprend le code par la suite, ce sera plus compréhensible pour lui.

Et puis aujourd'hui, avec la puissance et la mémoire qu'ont les ordis ou les smartphones, on est pas à ça près je pense

PS : Bienvenue parmi nous devjava

Présentation devjava

25 décembre 2013 à 22:42 bontiv  
Effectivement Nightmare, dans le cas de deux chaînes de caractères tu as raison. C'est plus lisible.

Par contre, pour plus de deux chaînes de caractère, il faut utiliser le StringBuilder. La concaténation avec le "+" pose d'énormes lacunes sur les performances. Pas grave ? Ho si ! Des concaténations dans les programmes de nos jours, on en fait tout le temps et ne pas tenir compte des soucis de performance du java peut mener à faire des applications qui rament pour rien. Par exemple, le jeu Wakfu développé en java (design 2D iso), qui demandait plus de performance que Battlefield 3.

Le StringBuilder va utiliser un realloc et un memcpy pour la concaténation alors que le "+" va utiliser un malloc et deux memcpy.

La théorie est que le premier va modifier la première chaîne de caractère pour y concaténer la seconde à la suite alors que dans le second cas on va créer une nouvelle chaîne de caractère pour éviter de toucher aux deux chaînes de caractères source.

Pour concaténer 4 chaines de caractères (a, b, c, d), voilà les équivalents en algo.

Avec StringBuilder :
result = malloc(strlen(a));
result = realloc(strlen(result) + strlen(b) + 1);
strcpy(result + strlen(result), b);
result = realloc(strlen(result) + strlen(c) + 1);
strcpy(result + strlen(result), c);
result = realloc(strlen(result) + strlen(d) + 1);
strcpy(result + strlen(result), d);
return result;

Avec "+" :
part1 = malloc(strlen(a) + strlen(b) + 1);
strcpy(part1, a);
strcpy(part1 + strlen(a), b);
part2 = malloc(strlen(part1) + strlen(c) + 1);
strcpy(part2, part1);
strcpy(part2 + strlen(part1), c);
free(part1);
result = malloc(strlen(part2) + strlen(d) + 1);
strcpy(result, part2);
strcpy(result + strlen(part2), d);
free(part2);

Première solution = 7 syscall
Deuxième solution = 11 syscall + 2 déplacement en mémoire totalement inutiles

Présentation devjava

25 décembre 2013 à 23:00 Nightmare  
Je suis bien d'accord
Tu as l'air calé, ça fait combien de temps que tu en fais ?

Présentation devjava

25 décembre 2013 à 23:08 bontiv  
J'en fais pas depuis très longtemps. Ma première ligne de java date d'il y a deux ans.

C'est juste que pour être un bon concepteur il vaut mieux avoir une large connaissance des différents langages de programmation. Je ne connais pas tous les langages, mais les principales caractéristiques des différents langages et leur fonctionnement. Je connais aussi les différents paradigmes de programmation.

Présentation devjava

25 décembre 2013 à 23:25 Nightmare  
C'est sûr, dès que tu connais le fonctionnement des principaux langages de prog, les suivants que tu abordes sont similaires.

Et toi devjava, deuis combien de temps tu dev en Java ?

Présentation devjava

26 décembre 2013 à 11:00 devjava  
Je développe en java depuis 4 ans maintenant.

String truc = "machin"
+ " truc"
+ " un autre truc";

générera le même code que

String truc = "machin truc un autre truc";

Pour les concaténations "sur une ligne" un StringBuilder n'est pas justifié.

Depuis java 1.5, le compilateur transforme automatiquement les concaténations en StringBuilder.

Une fonction de concaténation comme on a vu plus haut:

public void concat(String s1, String s2) {
return s1 + s2;
}

Sera transformé en

public void concat(String s1, String s2) {
return new StringBuilder().append(s1).append(s2).toString;
}

Par le compilateur.

On ne perd donc dans ce cas rien au niveau temps d'exécution, grâce au compilateur.

Par contre, si on est dans une boucle:

String truc = "";
for(int i=0;i<10;i++) {
truc = truc + i;
}

Le compilateur le verra comme:

String truc = "";
for(int i=0;i<10;i++) {
truc = new StringBuilder().append(truc).append(i).toString();
}

Ce qui est mieux qu'une concaténation pré-1.5 où ça se passait comme tu le disais bontiv.

Mais c'est pas encore optimisé, des objets StringBuilder sont instanciés pour rien:

StringBuilder truc = new StringBuilder();
for(int i=0;i<10;i++) {
truc.append(i);
}

Pour conclure: Le StringBuilder n'est jamais moins efficace qu'une concaténation avec le '+', mais est plus efficace dans certains cas.


Message édité le 2013-12-26 11:02:36 par devjava

Présentation devjava

26 décembre 2013 à 15:28 Alea  
Salut guy !

Présentation devjava

26 décembre 2013 à 16:56 bontiv  
Ha c'est sûr que le StringBuilder n'est jamais moins efficace. Par contre on ne parlait pas de la même chose. Tu me parles de preprocessing alors que moi je parlais d’exécution. Mais oui, le preprocesseur rattrape beaucoup de merde des développeurs.

C'est comme la multiplication par des puissances de deux et le décalage de bits.

Présentation devjava

26 décembre 2013 à 23:24 devjava  
Au moment de l'exécution il n'y a plus de code java mais du bytecode java compilé à la volée par la JVM qui le transforme en langage machine. Seul le compilateur voit le code java.