Projet de dictionnaires arabes
4 participants
Page 75 sur 90
Page 75 sur 90 • 1 ... 39 ... 74, 75, 76 ... 82 ... 90
Re: Projet de dictionnaires arabes
Je regarderais ton code ce soir.
Pour string vs stringbuilder, il faut juste comprendre quand utiliser l'un ou l'autre et comprendre comment marche les 2 pour faire son choix. Il n'y a pas une classe meilleure que l'autre dans l'absolu, cela dépend du contexte et cas d'usage.
Voici le code source en Java de StringBuilder
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/StringBuilder.java
Et le code source de StringBuilder en .NET
http://referencesource.microsoft.com/#mscorlib/system/text/stringbuilder.cs,adf60ee46ebd299f
Pour string vs stringbuilder, il faut juste comprendre quand utiliser l'un ou l'autre et comprendre comment marche les 2 pour faire son choix. Il n'y a pas une classe meilleure que l'autre dans l'absolu, cela dépend du contexte et cas d'usage.
Voici le code source en Java de StringBuilder
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/StringBuilder.java
Et le code source de StringBuilder en .NET
http://referencesource.microsoft.com/#mscorlib/system/text/stringbuilder.cs,adf60ee46ebd299f
Adel Medine- Messages : 643
Points : 655
Date d'inscription : 09/09/2013
Re: Projet de dictionnaires arabes
السلام عليكم ورحمة الله وبركاته
Très intéressant ces liens bâraka Allâhu fîka, je vais les mettre dans les favoris inchâ-a Allâh. Surtout pour le C# car pour Java j'ai configuré Eclipse de sorte qu'il me suffit de quelques clics pour accéder à la doc et aux sources.
Sinon pour String vs StringBuilder, j'ai vu que pour l'exemple que j'ai donné que le compilateur utilise un StringBuilder à l'intérieur de la boucle, j'ai comparé et c'est presque pareil que quand on utilise directement un StringBuilder...
Le ByteCode :
Très intéressant ces liens bâraka Allâhu fîka, je vais les mettre dans les favoris inchâ-a Allâh. Surtout pour le C# car pour Java j'ai configuré Eclipse de sorte qu'il me suffit de quelques clics pour accéder à la doc et aux sources.
Sinon pour String vs StringBuilder, j'ai vu que pour l'exemple que j'ai donné que le compilateur utilise un StringBuilder à l'intérieur de la boucle, j'ai comparé et c'est presque pareil que quand on utilise directement un StringBuilder...
Le ByteCode :
String str = new String("") ; for(int i = 0; i<=111 ; i++) str += "i = " + i + " i² = " + i*i + "\n"; ------------- | StringBuilder strB = new StringBuilder(); for(int i = 0; i<=111 ; i++) strB.append("i = " + i + " i² = " + i*i + "\n"); ------------- |
// Compiled from StringTestMemoire.java (version 1.2 : 46.0, super bit) public class StringTestMemoire { // Method descriptor #6 ()V // Stack: 1, Locals: 1 public StringTestMemoire(); 0 aload_0 [this] 1 invokespecial java.lang.Object() [8] 4 return Line numbers: [pc: 0, line: 2] Local variable table: [pc: 0, pc: 5] local: this index: 0 type: StringTestMemoire // Method descriptor #15 ([Ljava/lang/String;)V // Stack: 3, Locals: 3 public static void main(java.lang.String[] args); 0 new java.lang.String [16] 3 dup 4 ldc 6 invokespecial java.lang.String(java.lang.String) [20] 9 astore_1 [str] 10 iconst_0 11 istore_2 [i] 12 goto 58 15 new java.lang.StringBuffer [23] 18 dup 19 aload_1 [str] 20 invokestatic java.lang.String.valueOf(java.lang.Object) : java.lang.String [25] 23 invokespecial java.lang.StringBuffer(java.lang.String) [29] 26 ldc 28 invokevirtual java.lang.StringBuffer.append(java.lang.String) : java.lang.StringBuffer [32] 31 iload_2 [i] 32 invokevirtual java.lang.StringBuffer.append(int) : java.lang.StringBuffer [36] 35 ldc 37 invokevirtual java.lang.StringBuffer.append(java.lang.String) : java.lang.StringBuffer [32] 40 iload_2 [i] 41 iload_2 [i] 42 imul 43 invokevirtual java.lang.StringBuffer.append(int) : java.lang.StringBuffer [36] 46 ldc 48 invokevirtual java.lang.StringBuffer.append(java.lang.String) : java.lang.StringBuffer [32] 51 invokevirtual java.lang.StringBuffer.toString() : java.lang.String [43] 54 astore_1 [str] 55 iinc 2 1 [i] 58 iload_2 [i] 59 bipush 111 61 if_icmple 15 64 return Line numbers: [pc: 0, line: 8] [pc: 10, line: 9] [pc: 15, line: 10] [pc: 55, line: 9] [pc: 64, line: 18] Local variable table: [pc: 0, pc: 65] local: args index: 0 type: java.lang.String[] [pc: 10, pc: 65] local: str index: 1 type: java.lang.String [pc: 12, pc: 64] local: i index: 2 type: int } | // Compiled from StringTestMemoire1.java (version 1.2 : 46.0, super bit) public class StringTestMemoire1 { // Method descriptor #6 ()V // Stack: 1, Locals: 1 public StringTestMemoire1(); 0 aload_0 [this] 1 invokespecial java.lang.Object() [8] 4 return Line numbers: [pc: 0, line: 2] Local variable table: [pc: 0, pc: 5] local: this index: 0 type: StringTestMemoire1 // Method descriptor #15 ([Ljava/lang/String;)V // Stack: 4, Locals: 3 public static void main(java.lang.String[] args); 0 new java.lang.StringBuilder [16] 3 dup 4 invokespecial java.lang.StringBuilder() [18] 7 astore_1 [strB] 8 iconst_0 9 istore_2 [i] 10 goto 53 13 aload_1 [strB] 14 new java.lang.StringBuffer [19] 17 dup 18 ldc 20 invokespecial java.lang.StringBuffer(java.lang.String) [23] 23 iload_2 [i] 24 invokevirtual java.lang.StringBuffer.append(int) : java.lang.StringBuffer [26] 27 ldc 29 invokevirtual java.lang.StringBuffer.append(java.lang.String) : java.lang.StringBuffer [32] 32 iload_2 [i] 33 iload_2 [i] 34 imul 35 invokevirtual java.lang.StringBuffer.append(int) : java.lang.StringBuffer [26] 38 ldc 40 invokevirtual java.lang.StringBuffer.append(java.lang.String) : java.lang.StringBuffer [32] 43 invokevirtual java.lang.StringBuffer.toString() : java.lang.String [37] 46 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [41] 49 pop 50 iinc 2 1 [i] 53 iload_2 [i] 54 bipush 111 56 if_icmple 13 59 return Line numbers: [pc: 0, line: 12] [pc: 8, line: 13] [pc: 13, line: 14] [pc: 50, line: 13] [pc: 59, line: 18] Local variable table: [pc: 0, pc: 60] local: args index: 0 type: java.lang.String[] [pc: 8, pc: 60] local: strB index: 1 type: java.lang.StringBuilder [pc: 10, pc: 59] local: i index: 2 type: int } |
Ibn Nacer- Messages : 1990
Points : 2234
Date d'inscription : 04/09/2011
Re: Projet de dictionnaires arabes
C'est pas mal comme code ce que tu as fais pour commencer comme moyen de s'exercer et se former.
Concernant les performances puisque tu sembles t'y intéresser. Mesure bien ce que cela te fait gagner et dans quel cas d'usage particulier. Il te faut au moins un ordre de grandeur de performances gagnées qui soit significatif (ex : dans un cas cela mets 10 min et dans l'autre 1 min soit un rapport 10 pour x nombre de données) Tu peux aussi calculer la complexité de ton algorithme O(n) où n est le nombre de données. L'autre aspect à ne pas négliger c'est à quel point cela complexifie la qualité du code écrit.
J'ai récupéré et retravaillé ce que tu as écrit comme code Java pour le passer en C#. http://rextester.com/live/ZBZA66428
Il y a des choses qui ne doivent pas exister en Java. Par exemple, les méthodes d'extensions. Une classe qui définie des méthodes d'extensions doit être static ainsi que ses méthodes. On utilise le mot clef this en paramètre d'une méthode pour spécifier la classe que l'on étends. (nous sommes en pleins pattern OCP) C'est ce que j'utilise à cet endroit
Biensûr on peut utiliser les méthodes d'extensions avec n'importe quelle classe et pas seulement la classe string
Une autre syntaxe qui existe peut-être sous une forme en Java il me semble c'est la syntaxe Linq.
Linq est une collection de classes avec des méthodes d'extensions justement. On voit que là j'utilise une méthode Contains et ForEach de linq qui s'applique sur une string et un char ici mais cela marche avec n'importe quel collection de n'importe quelle classe;
Concernant les performances puisque tu sembles t'y intéresser. Mesure bien ce que cela te fait gagner et dans quel cas d'usage particulier. Il te faut au moins un ordre de grandeur de performances gagnées qui soit significatif (ex : dans un cas cela mets 10 min et dans l'autre 1 min soit un rapport 10 pour x nombre de données) Tu peux aussi calculer la complexité de ton algorithme O(n) où n est le nombre de données. L'autre aspect à ne pas négliger c'est à quel point cela complexifie la qualité du code écrit.
J'ai récupéré et retravaillé ce que tu as écrit comme code Java pour le passer en C#. http://rextester.com/live/ZBZA66428
Il y a des choses qui ne doivent pas exister en Java. Par exemple, les méthodes d'extensions. Une classe qui définie des méthodes d'extensions doit être static ainsi que ses méthodes. On utilise le mot clef this en paramètre d'une méthode pour spécifier la classe que l'on étends. (nous sommes en pleins pattern OCP) C'est ce que j'utilise à cet endroit
- Code:
static string WithoutVowel(this string targetText)
{
//...
}
//plus haut dans le code on l'utilise ainsi avec une variable de type string
vocalizedText.WithoutVowel()
Biensûr on peut utiliser les méthodes d'extensions avec n'importe quelle classe et pas seulement la classe string
Une autre syntaxe qui existe peut-être sous une forme en Java il me semble c'est la syntaxe Linq.
Linq est une collection de classes avec des méthodes d'extensions justement. On voit que là j'utilise une méthode Contains et ForEach de linq qui s'applique sur une string et un char ici mais cela marche avec n'importe quel collection de n'importe quelle classe;
- Code:
targetText.Contains(subStringSearched);
- Code:
textWithoutVowel.ToList().ForEach(character=>
{
if(_vowels.Contains(character) != true)
{
textWithoutVowel += character;
}
})
Adel Medine- Messages : 643
Points : 655
Date d'inscription : 09/09/2013
Re: Projet de dictionnaires arabes
Oui je ne voulais pas descendre jusqu'au Byte Code. Même si c'est une manière plus proche de la machine de voir les optimisations.
Nous avons des tests de performances qui nous permettent justement d'adapter nos solutions. Si avec un test significatif avec une string ou stringbuilder cela est plus performant on adoptera cette solution peu importe le Byte Code généré. C'est à dire qu'on peut s'en abstraire du Byte Code, cela peut-être un plus de connaître mais sans vraiment de plus ou exception exceptionnelle...
Nous avons des tests de performances qui nous permettent justement d'adapter nos solutions. Si avec un test significatif avec une string ou stringbuilder cela est plus performant on adoptera cette solution peu importe le Byte Code généré. C'est à dire qu'on peut s'en abstraire du Byte Code, cela peut-être un plus de connaître mais sans vraiment de plus ou exception exceptionnelle...
Adel Medine- Messages : 643
Points : 655
Date d'inscription : 09/09/2013
Re: Projet de dictionnaires arabes
Il y a un petit bug dans mon code mais qui n'influence pas le résultat avec ce jeu de tests. Est-ce que tu pourras le trouver ?
EDIT : je me suis aperçu après que ce n'était pas une copie à chaque fois mais le même lien. Du coup j'ai retiré le bug qui s'y trouvait. Revoici le code avec le bug
EDIT : je me suis aperçu après que ce n'était pas une copie à chaque fois mais le même lien. Du coup j'ai retiré le bug qui s'y trouvait. Revoici le code avec le bug
- Code:
static string WithoutVowel(this string targetText)
{
string textWithoutVowel = new string(targetText.ToCharArray());
textWithoutVowel .ToList().ForEach(character=>
{
if(_vowels.Contains(character) != true)
{
textWithoutVowel += character;
}
});
return textWithoutVowel;
}
Dernière édition par Adel Medine le Mer 24 Déc - 21:07, édité 2 fois
Adel Medine- Messages : 643
Points : 655
Date d'inscription : 09/09/2013
Page 75 sur 90 • 1 ... 39 ... 74, 75, 76 ... 82 ... 90
Sujets similaires
» قاموس البحث العلميّ / Tous types de dictionnaires arabes en ligne ou à télécharger
» De la synonymie à la traduction ou comment améliorer les dictionnaires bilingues arabes
» Littérature arabe : livres / Arabic Literature: books
» Dictionnaires / معجم / dictionaries
» Dictionnaires latins / قواميس لاتينية / Latin dictionaries
» De la synonymie à la traduction ou comment améliorer les dictionnaires bilingues arabes
» Littérature arabe : livres / Arabic Literature: books
» Dictionnaires / معجم / dictionaries
» Dictionnaires latins / قواميس لاتينية / Latin dictionaries
Page 75 sur 90
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|