Dixit Wiktionnary[1], le momt "immuable" existe même depuis longtemps (_au moins_ depuis 1932), et sa définition colle parfaitement avec le terme anglais "immutable"[2]
"Or mon contrat disait que je voulais getMin, GetMax,GetMinMax et pas getKeys, get Values, getDict..."
Dans ce cas, n'aurait-il pas mieux valu (en Java en tout cas) créer un type qui contient la hashtable, plutôt qu'un type qui l'étend ?
Parce que l'héritage, c'est bien beau mais ça peut vite coincer (entre autre, parce qu'on ne peut pas faire de l'héritage multiple et que l'on a peut-être déjà étendu une autre classe).
Selon moi, un tuple contient un type particulier (la hashtable) pour gérer sa tambouille interne, mais n'est pas ce type.
Moi, je trouve ça très naturel, au contraire !
On dirait des injures censurées d'une BD...
C'est là toute la différence avec Java, qui est peut-être verbeux mais qui fait plus penser aux injures du capitaine Haddock : on en a plein la bouche, de tous ces mots !
Mais la SNCF a fait un démenti, justement !!!
Plusieurs sites renvoie vers le même lien[1]... sauf que quand on clique, on arrive sur la page d'accueil de http://www.sncf.com, avec du bon gros flashKiPue.
PS : si tu te contentes de croire les rumeurs (fussent-elles "généralisées") sans vérifier par toi-même un minimum, comment dire... ?
Sa solution fonctionne : elle repose juste sur un booléen en interne qui permet de ne pas refaire un traitement pouvant être long (rechercher le min et le max d'un tableau, ...) inutilement. Je ne vois pas ce qu'elle a de complexe/débile/whatever
Je pense que la mise en concurrence prochaine de la SNCF avec d'autres (Air France, ...) n'y est sans doute pas pour rien !
La SNCF a une réputation de retard et de grèves qu'elle se traine (à tort ou à raison, là n'est même pas la question) depuis des années (voire plus).
La direction veut sans doute tenter d'inverser cette tendance, sous peine de perdre de la clientèle dès l'ouverture du marché du rail au public.
La liste est un des types existants en Java, mais sans doute pas le plus adapté dans cet exemple.
Il existe aussi les types Hashtable, Map, ...
Dans ton exemple, j'utiliserais plutôt des Hashtable que des listes, que chaque case contient une information totalement différente des autres (je ne parle pas forcément d'une différence sur le type).
Donc, tu voudrais qu'on puisse écrire ceci :
public TypeA, TypeB, TypeC maMethode()
{
[...] // On déclare et on utilise les variables a, b et c
return a, b, c;
}
// Utilisation de la méthode avec triple-renvoi
a1, b1, c1 = maMethode();
Faut voir... Là comme ça, je vois surtout le travail qu'il y aurait à faire au niveau du compilo (parce qu'un tel truc n'a jamais été envisagé).
Par contre, ton exemple en ruby me fait peur ! Comment savoir combien et de quels types seront les paramètres de retour d'une méthode ?
"Et pourquoi un langage objet ne devrait pas être concis ??"
Le problème dans ce cas serait (selon moi) le suivant :
* Soit on dit que la méthode renvoie un List mais dans ce cas, le compilateur ne sait pas quel type concret utiliser (un des types de l'API officielle Java ? Un type créé par le développeur ? Dans les 2 cas, lequel prendre si plusieurs types concrets existent) ;
* Soit on dit que la méthode renvoie un TypeConcretList mais dans ce cas, on a un code dépendant d'un type concret et non plus d'une interface (List est une interface).
Voilà, je ne dis pas que la solution n'existe pas, mais là comme ça, je ne la vois pas.
"non, mais que si tu passes un int en paramètre dans une fonction il n'est pas possible de modifier sa valeur dans la fonction et que cette valeur soit visible en dehors, au retour.
En gros passer des références quoi..."
Ah oki...
Bon, int étant un type primitif, sa valeur est passée par copie (il en va de même pour tous les types primitifs dans Java).
Depuis Java 5, il existe l'auto-boxing, qui permet de remplacer un type primitif par son équivalent complexe (Integer pour int) et vice-versa, et cela peut même être implicite (une méthode acceptant un int acceptera aussi un Integer, sans rien avoir à modifier).
Par contre, ces classes englobantes sont immuables.
Du coup, on ne peut pas modifier un Integer, c'est vrai...
"oué donc je retourne une liste (il faut donc la créer avant de le retourner, ajouter les valeurs, etc) et au retrour je lis ma liste et extrait toutes les valeurs...
"impossible de retourner par exemple facilement un liste de valeurs"
T'as le droit de créer des listes (et de les faire renvoyer par la méthode), tu sais ?
"De même je crois qu'on ne peut pas passer de paramètre modifiable en java... "
Que veux-tu dire par là ? Que les paramètres reçus par une méthode ne peuvent pas évoluer au sein de la méthode ??? Première nouvelle !
Et j'ajouterais que ton exemple pour comparer Perl et Java sur leur utilisation des Regexp est un peu "pas objectif" :
if ($line =~ /(\w+)=(\d+)/ ) {
$ident=$1;
$value=$2;
}
Pattern p = Pattern.compile("(\w+)=(\d+)");
Matcher m = p.matcher(line);
boolean b = m.matches();
if(b) {
if (m.groupCount() == 2){
ident = m.group(1);
value = m.group(2);
}
}
Même s'il fait 9 lignes (sans compter les lignes blanches) là où ton exemple en fait 4, je trouve cela bien plus lisible : les noms des classes sont tellement parlants que je sais de suite ce que je suis en train de regarder. Ce n'est pas du tout le cas (du moins pour moi qui ne connais pas Perl) avec ton exemple.
Ensuite, dans l'exemple Java, tu utilises à rallonge la définition des variables alors qu'elles ne semblent pas te resservir plus tard... Autant raccourcir un max (si c'est le nombre de lignes de code qui importe) :
Matcher m = Pattern.compile("(\w+)=(\d+)").matcher(line);
if(m.matches()) {
if (m.groupCount() == 2){
ident = m.group(1);
value = m.group(2);
}
}
C'est plus court (mais perso, je ne trouve pas ça forcément plus lisible)
La galère dès que l'on veut créer une structure de donnée : pas de notion claire de création de type, il faut créer une table de hashage spécial, il n'y a pas de distinction claire entre type et variable. Ce n'est pas très clair/propre quand on essaye de faire marcher tout cela entre plusieurs fonctions.
On s'en débrouille aisément en les doublant partout où on les utilise, ou en créant un package, mais ces solutions restent lourdes.
- La galère pour passer autre chose que des scalaire en paramètre : on attend perl 6 avec impatience. Personnellement après plusieurs tentatives infructueuses avec les références "comme dans la doc", j'ai laissé tombé et opté pour une très crade variable globale.
- La caractère non typé des variable, voire le point 1 : Ca révèle des surprises, et j'éviterai perl pour du code supérieur à 5000 lignes ou trop complexe, ça deviendrai vite ingérable.
- Les références, c'est puissant, mais c'est un pis allé du à l'absence de notion de type. A l'utilisation c'est pénible, casse-gueule, dangereux, bref tout ce qui m'énerve dans les pointeurs à la C.
Ben voilà, tu viens de comprendre pourquoi il existe plusieurs langages : parce que chacun a ses avantages et ses inconvénients.
Tous ces inconvénients n'existent pas en Java (par ex.) !
Je ne comprends pas ce qui, en local, peut entrainer une consommation de place supérieure à la place consommée sur le serveur ?
Parce que moi, c'est ainsi que j'ai compris la question !
DLFP voudrait pas organiser un entretien avec les développeurs de voyages-sncf ?
Bon, on a peu de chances d'avoir des réponses, mais ça vaut le coup de tenter ^_^
Comment ça, le "double de place" ?
La copie locale occupe autant de place que le dépôt sur le serveur (modulo les différences, locales ou distantes, apportées depuis la dernière synchronisation).
A ben tu (tu permets que je te tutoie ? De toutes façons, les prières qui te sont destinées te tutoient toujours) tombes bien : j'ai une petite question à te poser :
Laquelle (voire aucune) des 3 religions monothéistes est la plus proche de la Vérité et décrit le mieux ton opinion ?
/me sort le transat, le caméscope, les binouzes, le pop-corn et le barbecue et s'apprête à voir Dieu troller...
Parce que le but du procès n'était pas une lutte entre entreprises propriétaires (même si MS et Opera le sont), mais une lutte pour permettre à l'acheteur de ne pas se voir imposer un produit au détriment des autres !
Donc Opera ne réclamait pas d'être installé par défaut dans tous les Windows, mais l'arrêt définitif de l'installation par défaut et de façon irrémédiable d'IE !
Bref, la MoFo (de même qu'Apple, Google, et autres développeurs de navigateurs Web) aurait du se joindre à Opera dans cette plainte
[^] # Re: Et oui...
Posté par windu.2b . En réponse au journal Le site web des professionnels Microsoft fonctionne mieux avec Linux/Mozilla. Évalué à 9.
[^] # Re: Toujours la...
Posté par windu.2b . En réponse au journal MS va supprimer 5000 postes. Évalué à 10.
[^] # Re: 2009
Posté par windu.2b . En réponse à la dépêche Sortie de Mandriva Linux 2009.1 Spring Alpha 2. Évalué à 10.
===>[]
[^] # Re: Python c'est super !
Posté par windu.2b . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 5.
1 http://fr.wiktionary.org/wiki/immuable
2 http://en.wiktionary.org/wiki/immutable
[^] # Re: javascript
Posté par windu.2b . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 2.
Dans ce cas, n'aurait-il pas mieux valu (en Java en tout cas) créer un type qui contient la hashtable, plutôt qu'un type qui l'étend ?
Parce que l'héritage, c'est bien beau mais ça peut vite coincer (entre autre, parce qu'on ne peut pas faire de l'héritage multiple et que l'on a peut-être déjà étendu une autre classe).
Selon moi, un tuple contient un type particulier (la hashtable) pour gérer sa tambouille interne, mais n'est pas ce type.
[^] # Re: Explicit is better than implicit.
Posté par windu.2b . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 8.
On dirait des injures censurées d'une BD...
C'est là toute la différence avec Java, qui est peut-être verbeux mais qui fait plus penser aux injures du capitaine Haddock : on en a plein la bouche, de tous ces mots !
:-D
[^] # Re: Communication
Posté par windu.2b . En réponse au journal Un entretien avec la SNCF ?. Évalué à 6.
Plusieurs sites renvoie vers le même lien[1]... sauf que quand on clique, on arrive sur la page d'accueil de http://www.sncf.com, avec du bon gros flashKiPue.
PS : si tu te contentes de croire les rumeurs (fussent-elles "généralisées") sans vérifier par toi-même un minimum, comment dire... ?
1 http://www.entreprise-sncf.com/communiq/hoax2.htm
[^] # Re: La notation ... pfffff
Posté par windu.2b . En réponse au journal Juste pour dire .... Évalué à 2.
[^] # Re: J'ai une question pour Guigui
Posté par windu.2b . En réponse au journal Un entretien avec la SNCF ?. Évalué à 3.
[^] # Re: javascript
Posté par windu.2b . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 2.
Sa solution fonctionne : elle repose juste sur un booléen en interne qui permet de ne pas refaire un traitement pouvant être long (rechercher le min et le max d'un tableau, ...) inutilement. Je ne vois pas ce qu'elle a de complexe/débile/whatever
[^] # Re: Communication
Posté par windu.2b . En réponse au journal Un entretien avec la SNCF ?. Évalué à 4.
La SNCF a une réputation de retard et de grèves qu'elle se traine (à tort ou à raison, là n'est même pas la question) depuis des années (voire plus).
La direction veut sans doute tenter d'inverser cette tendance, sous peine de perdre de la clientèle dès l'ouverture du marché du rail au public.
[^] # Re: javascript
Posté par windu.2b . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 2.
Il existe aussi les types Hashtable, Map, ...
Dans ton exemple, j'utiliserais plutôt des Hashtable que des listes, que chaque case contient une information totalement différente des autres (je ne parle pas forcément d'une différence sur le type).
[^] # Re: javascript
Posté par windu.2b . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 2.
public TypeA, TypeB, TypeC maMethode()
{
[...] // On déclare et on utilise les variables a, b et c
return a, b, c;
}
// Utilisation de la méthode avec triple-renvoi
a1, b1, c1 = maMethode();
Faut voir... Là comme ça, je vois surtout le travail qu'il y aurait à faire au niveau du compilo (parce qu'un tel truc n'a jamais été envisagé).
Par contre, ton exemple en ruby me fait peur ! Comment savoir combien et de quels types seront les paramètres de retour d'une méthode ?
[^] # Re: javascript
Posté par windu.2b . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 0.
Le problème dans ce cas serait (selon moi) le suivant :
* Soit on dit que la méthode renvoie un List mais dans ce cas, le compilateur ne sait pas quel type concret utiliser (un des types de l'API officielle Java ? Un type créé par le développeur ? Dans les 2 cas, lequel prendre si plusieurs types concrets existent) ;
* Soit on dit que la méthode renvoie un TypeConcretList mais dans ce cas, on a un code dépendant d'un type concret et non plus d'une interface (List est une interface).
Voilà, je ne dis pas que la solution n'existe pas, mais là comme ça, je ne la vois pas.
[^] # Re: javascript
Posté par windu.2b . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 1.
En gros passer des références quoi..."
Ah oki...
Bon, int étant un type primitif, sa valeur est passée par copie (il en va de même pour tous les types primitifs dans Java).
Depuis Java 5, il existe l'auto-boxing, qui permet de remplacer un type primitif par son équivalent complexe (Integer pour int) et vice-versa, et cela peut même être implicite (une méthode acceptant un int acceptera aussi un Integer, sans rien avoir à modifier).
Par contre, ces classes englobantes sont immuables.
Du coup, on ne peut pas modifier un Integer, c'est vrai...
"oué donc je retourne une liste (il faut donc la créer avant de le retourner, ajouter les valeurs, etc) et au retrour je lis ma liste et extrait toutes les valeurs...
myFunc = function() {
return [1, 2];
}
var [a, b] = myFunc();
C'est quand même plus sympa, non ? "
La forme est en effet assez lisible et concise... Mais pour un langage objet, je crains qu'elle ne le soit trop !
[^] # Re: javascript
Posté par windu.2b . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 2.
T'as le droit de créer des listes (et de les faire renvoyer par la méthode), tu sais ?
"De même je crois qu'on ne peut pas passer de paramètre modifiable en java... "
Que veux-tu dire par là ? Que les paramètres reçus par une méthode ne peuvent pas évoluer au sein de la méthode ??? Première nouvelle !
[^] # Re: T'as tout compris
Posté par windu.2b . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 10.
if ($line =~ /(\w+)=(\d+)/ ) {
$ident=$1;
$value=$2;
}
Pattern p = Pattern.compile("(\w+)=(\d+)");
Matcher m = p.matcher(line);
boolean b = m.matches();
if(b) {
if (m.groupCount() == 2){
ident = m.group(1);
value = m.group(2);
}
}
Même s'il fait 9 lignes (sans compter les lignes blanches) là où ton exemple en fait 4, je trouve cela bien plus lisible : les noms des classes sont tellement parlants que je sais de suite ce que je suis en train de regarder. Ce n'est pas du tout le cas (du moins pour moi qui ne connais pas Perl) avec ton exemple.
Ensuite, dans l'exemple Java, tu utilises à rallonge la définition des variables alors qu'elles ne semblent pas te resservir plus tard... Autant raccourcir un max (si c'est le nombre de lignes de code qui importe) :
Matcher m = Pattern.compile("(\w+)=(\d+)").matcher(line);
if(m.matches()) {
if (m.groupCount() == 2){
ident = m.group(1);
value = m.group(2);
}
}
C'est plus court (mais perso, je ne trouve pas ça forcément plus lisible)
# T'as tout compris
Posté par windu.2b . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 10.
On s'en débrouille aisément en les doublant partout où on les utilise, ou en créant un package, mais ces solutions restent lourdes.
- La galère pour passer autre chose que des scalaire en paramètre : on attend perl 6 avec impatience. Personnellement après plusieurs tentatives infructueuses avec les références "comme dans la doc", j'ai laissé tombé et opté pour une très crade variable globale.
- La caractère non typé des variable, voire le point 1 : Ca révèle des surprises, et j'éviterai perl pour du code supérieur à 5000 lignes ou trop complexe, ça deviendrai vite ingérable.
- Les références, c'est puissant, mais c'est un pis allé du à l'absence de notion de type. A l'utilisation c'est pénible, casse-gueule, dangereux, bref tout ce qui m'énerve dans les pointeurs à la C.
Ben voilà, tu viens de comprendre pourquoi il existe plusieurs langages : parce que chacun a ses avantages et ses inconvénients.
Tous ces inconvénients n'existent pas en Java (par ex.) !
[^] # Re: Variation
Posté par windu.2b . En réponse au journal Considération sur l'emploi de rsync. Évalué à 2.
Parce que moi, c'est ainsi que j'ai compris la question !
# Un entretien ?
Posté par windu.2b . En réponse au journal Voyages-sncf veut devenir le Google du rail.. Évalué à 10.
Bon, on a peu de chances d'avoir des réponses, mais ça vaut le coup de tenter ^_^
[^] # Re: Variation
Posté par windu.2b . En réponse au journal Considération sur l'emploi de rsync. Évalué à 2.
La copie locale occupe autant de place que le dépôt sur le serveur (modulo les différences, locales ou distantes, apportées depuis la dernière synchronisation).
[^] # Re: en même temps...
Posté par windu.2b . En réponse au journal Le rail et l'argent du rail. Évalué à 3.
1 http://info.france2.fr/dossiers/economie/46229199-fr.php
[^] # Re: Mon argument "qui clignote" en faveur de Linux
Posté par windu.2b . En réponse au journal Un peu de publicité. Évalué à 4.
[^] # Re: .
Posté par windu.2b . En réponse au journal Ras-le-bol des utilisateurs de logiciels de tout bord !!!. Évalué à 1.
Laquelle (voire aucune) des 3 religions monothéistes est la plus proche de la Vérité et décrit le mieux ton opinion ?
/me sort le transat, le caméscope, les binouzes, le pop-corn et le barbecue et s'apprête à voir Dieu troller...
[^] # Re: Merci Opera
Posté par windu.2b . En réponse au journal La CEE rouvre le procès MS dans la guerre des navigateurs.. Évalué à 5.
Donc Opera ne réclamait pas d'être installé par défaut dans tous les Windows, mais l'arrêt définitif de l'installation par défaut et de façon irrémédiable d'IE !
Bref, la MoFo (de même qu'Apple, Google, et autres développeurs de navigateurs Web) aurait du se joindre à Opera dans cette plainte