Apprendre les langues arabe et française
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-31%
Le deal à ne pas rater :
PC Portable Gamer Lenovo 15” – RTX 4060 Core i5-12450H RAM 16 Go ...
824.99 € 1199.99 €
Voir le deal

Projet de dictionnaires arabes

4 participants

Page 75 sur 90 Précédent  1 ... 39 ... 74, 75, 76 ... 82 ... 90  Suivant

Aller en bas

Projet de dictionnaires arabes - Page 75 Empty Re: Projet de dictionnaires arabes

Message par Adel Medine Mer 24 Déc - 10:28

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

Adel Medine

Messages : 643
Points : 655
Date d'inscription : 09/09/2013

Revenir en haut Aller en bas

Projet de dictionnaires arabes - Page 75 Empty Re: Projet de dictionnaires arabes

Message par Ibn Nacer Mer 24 Déc - 19:20

السلام عليكم ورحمة الله وبركاته

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 [18]
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 [41]
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 [35]
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

Revenir en haut Aller en bas

Projet de dictionnaires arabes - Page 75 Empty Re: Projet de dictionnaires arabes

Message par Adel Medine Mer 24 Déc - 19:33

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
Code:

static string WithoutVowel(this string targetText)
{
  //...


//plus haut dans le code on l'utilise ainsi avec une variable de type string
vocalizedText.WithoutVowel()
J'ai une méthode WithoutVowel qui étends la classe string. On voit une syntaxe spéciale dans les paramètres de la méthode où le mot clef this apparaît. Cela permet aussi d'écrire en C# : "une string".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;
                                }
                            })
Ce qui est rends vraiment encore Linq plus puissant c'est que cela s'applique sur d'autres sources de données que les objets que l'on vient de voir ici. Cela marche avec des fichiers xml mais aussi les bases de données sql. Ainsi les dicos et le Coran que nous avons en sql donneront en linq une classe par table et on pourra requêter la base de données sans sql mais en utilisant la même syntaxe qu'ici en utilisant des Contains et pleins d'autres méthodes de filtres et recherches dispo en linq

Adel Medine

Messages : 643
Points : 655
Date d'inscription : 09/09/2013

Revenir en haut Aller en bas

Projet de dictionnaires arabes - Page 75 Empty Re: Projet de dictionnaires arabes

Message par Adel Medine Mer 24 Déc - 19:36

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...

Adel Medine

Messages : 643
Points : 655
Date d'inscription : 09/09/2013

Revenir en haut Aller en bas

Projet de dictionnaires arabes - Page 75 Empty Re: Projet de dictionnaires arabes

Message par Adel Medine Mer 24 Déc - 19:51

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
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

Revenir en haut Aller en bas

Projet de dictionnaires arabes - Page 75 Empty Re: Projet de dictionnaires arabes

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 75 sur 90 Précédent  1 ... 39 ... 74, 75, 76 ... 82 ... 90  Suivant

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum