Je cherche un langage mieux que JAVA de rôle similaire

toyo2020 Messages postés 45 Date d'inscription jeudi 15 octobre 2020 Statut Membre Dernière intervention 11 octobre 2022 - 16 oct. 2020 à 15:41
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 - 26 oct. 2020 à 08:03
bonjour

un des problèmes de JAVA est que le nombre de type primitif (byte & entier & booléen & chaîne de caractère ...) y est très réduit - je cherche un langage équivalent mais ayant un nombre très élevé de type primitif - il pourrait y avoir d'autres type primitif comme couleur & tableau & touche ...

vous connaissez un tel langage ?

9 réponses

Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 624
16 oct. 2020 à 16:53
Bonjour

Une couleur, c’est une structure ou un objet composé de 4 bytes (a, r, g et b) pas vraiment primitif....

Une touche aussi c’est « complexe », elle peut être relâchée, appuyée, appuyée depuis longtemps, faire parti d’une combinaison, etc... Pas primitif non plus.

Pour le tableau, je suis surpris mais je ne code pas en Java, alors...
Mais en C le tableau existe de base alors que la chaine de caractère non, il faut justement utiliser un tableau de caractères.
En C++, la chaine de caractères existe, mais pas par défaut, il faut ajouter la référence qui va bien.
En C#, la chaine de caractères est un objet plus complexe que le tableau.

Au final, quel est ton besoin, d’oú te viens l’idée que plus de types primitifs serait mieux?

0
pgl10 Messages postés 366 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 17 mai 2023 9
17 oct. 2020 à 08:48
Bonjour,

Je ne connais pas Java.
Mais en C++ il y a aussi les entités natives du langage et de plus il est possible et assez facile de créer des entités définies par l'utilisateur, on utilise pour cela : class MonObjet { ... }; Et l'utilisateur doit programmer tous les traitements prévus pour cette entité nouvelle : lecture, écriture et autres opérations individuelles ou mutuelles ou jointes avec d'autres entités.
J'imagine qu'avec Java il en est de même.

Je peux ajouter qu'avec le langage de programmation Scheme, qui est un dialecte de type langage Lisp, il est très facile de créer des entités définies par l'utilisateur et de les utiliser conjointement avec les entités natives de Scheme : booléens, entiers sur 64 bits ou entiers de longueurs aussi grandes que nécessaires, rationnels de longueurs aussi grandes que nécessaires, nombres complexes et chaines de caractères. Avis aux amateurs !

Cordialement, pgl10
0
KX Messages postés 16703 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 1 juin 2023 126
17 oct. 2020 à 10:12
Bonjour,
"le nombre de type primitif (byte & entier & booléen & chaîne de caractère ...) y est très réduit "
"il pourrait y avoir d'autres type primitif comme couleur & tableau & touche"
Java est un langage objet, donc il manipule des classes.

Un tableau est un objet, il possède un attribut (length, de type int) et hérite de toutes les méthodes de la super classe Object (equals, toString...)
Quant à la chaîne de caractères, c'est aussi une classe (String), qui possède plusieurs attributs, dont un tableau de byte pour représenter les caractères, ce n'est donc pas un type primitif.

Remarque : tous les types primitifs sont associés à une classe correspondante, par exemple int avec Integer.

Donc il faudrait déjà faire le tri entre ce qui est primitif ou ce qui ne l'est pas.

En Java, je parlerais plutôt de classes standards, c'est à dire celles spécifiées dans l'API Java (Standard Edition) et qui sont donc directement accessibles dans un programme Java.
En Java 15 (la dernière version), il y en a 4400 :
https://docs.oracle.com/en/java/javase/15/docs/api/allclasses-index.html

Les couleurs sont là : https://docs.oracle.com/en/java/javase/15/docs/api/java.desktop/java/awt/Color.html
Quant aux touches du clavier, elles sont listées ici : https://docs.oracle.com/en/java/javase/15/docs/api/java.desktop/java/awt/event/KeyEvent.html#field.summary

Remarque : en Java il est également possible de rajouter des bibliothèques complémentaires, il y en a des millions accessibles gratuitement via les dépôts Maven : https://mvnrepository.com/repos
0
Dalfab Messages postés 704 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 19 mai 2023 11
17 oct. 2020 à 11:49
Bonjour,

Il faudrait savoir pourquoi tu souhaites avoir des types "primitifs", peut-être que ton besoin est que ça ne soit pas une classe. Si on s'intéresse aux langages orientés objet, presque tous les langages sauf Delphi et Java devraient te convenir.

Par exemple en C++, tous les types sont manipulés directement, si on veut une référence ça n'est pas dans le type mais dans la manière de l'utiliser. Tout est objet en C++, sauf
void
et les fonctions, les tableaux bruts sont eux des "pas tout à fait objet".

Par exemple en C#, pour définir un type référence on utilise le mot
class
et pour définir un type données on utilise le mot
struct
.
0
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 624
17 oct. 2020 à 13:59
Salut, C# est un langage objet (pas "juste" orienté objet, tout comme Java d'ailleurs), donc conseiller d'utiliser des structure à la place de classes va à l'encontre du paradigme. Les structures n'ont normalement vocation qu'au dialogue avec des api ou des programmes dont les paramètres des méthodes sont des structures.
Mais quoi qu'il en soit, une structure c'est pas primitif.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
toyo2020 Messages postés 45 Date d'inscription jeudi 15 octobre 2020 Statut Membre Dernière intervention 11 octobre 2022
18 oct. 2020 à 12:00
Au final, quel est ton besoin, d’oú te viens l’idée que plus de types primitifs serait mieux?

si on crée un classe CHAINE-CARACTERE alors la manipulation d’un objet de cette classe (fusionner deux chaînes de caractère & compter le nombre de lettre S dans la chaîne …) alors il faudra 15 à 20 lignes de code pour réaliser les actions souhaitées

maintenant il faudra 2 à 3 lignes de code pour réaliser ces mêmes actions avec l’objet primitif < chaîne caractère > - un langage ayant 150 ou 350 objets primitif et non une dizaine comme JAVA serait très pertinent selon moi
0
KX Messages postés 16703 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 1 juin 2023 126
Modifié le 18 oct. 2020 à 12:35
Un type primitif est uniquement là pour faire du stockage de données, dans différents formats.
Par exemple en Java il y en a 8 : boolean, byte, char, short, int, long, float et double.

Donc en particulier, un type primitif n'a pas de méthode, ce qui signifie que si < chaîne caractère > était un type primitif, ça stockerait une donnée dans un nouveau format et c'est tout.

Mais "fusionner deux chaînes de caractère & compter le nombre de lettre S dans la chaîne" nécessiteraient des méthodes de traitement et elles seraient tout aussi complexes que la chaîne de caractères soit un type primitif ou un objet...

NB. En réalité je pense qu'un type primitif - sans état donc - serait assimilable à un objet immuable, un type particulier d'objets qui ne peuvent pas se modifier, ce qui induit un certain nombre de limitations et me ferait penser que dans le cas général une méthode de manipulation d'un type primitif nécessiterait plus de code que la même méthode pour un objet (et que c'est pour ça qu'il n'y a pas plus de types primitifs).
0
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 624
18 oct. 2020 à 22:28
Bonsoir

alors il faudra 15 à 20 lignes de code.... il faudra 2 à 3 lignes de code


Ha le fantasme du nombre de ligne de lignes de code....
L’époque où un logiciel ne pouvait pas dépasser quelques centaines de kilooctets et donc l’économie d’un retour chariot était précieuse est loin derrière nous.

Alors certes le tout en une ligne peut être un jeu. Mais c’est aussi plus chiant à débogguer le cas échéant. Alors qu’avec une action par ligne c’est plus simple.

Ton exemple de fusion et de comptage de caractères est peut-être un exemple parmi tant d’autre ou à l’inverse une situation que tu rencontre souvent.
Dans le deuxième cas, en C# je m’écris une extension de classe.
J’ai fait une recherche rapide et il semble qu’il y a un équivalent en Java. KX pourra sûrement nous indiquer si je me trompe.

Par exemple je code souvent des applications traitant des fichiers textes plein de nombres, il me faut donc à chaque fois convertir les string en int ou double, pour les décimaux, faire attention au symbole décimal, ne pas planter tout le programme quand une conversion échoue, etc... Bien sûr, je n’allais recommencer à chaque projet, ni même dupliquer le code n fois dans un projet. J’ai donc écrit une méthode pour les int et une pour les doubles qui font le job une fois pour toute. J’aurais pu les mettre dans une classe, mais il aurait fallut instancier un objet à chaque conversion (là pour le coup c’est des lignes de code et de la mémoire pour rien). J’aurais pu les mettre dans une classe static (à l’instar de Math.Cos qui existe dans les 2 langages). Quelque part, considérant que la classe string dont j’ai besoin doit savoir se convertir en nombre, j’ai choisi d’ajouter ces 2 méthodes à la classe standard et je l’utilise ainsi
int un = "1".ToInt();

Je te passe le code de ToInt() et surtout la syntaxe d’extension qui ne ressemble pas à ce que j’ai trouvé pour Java, mais cette ligne est claire et concise et peut-être cela se rapproche de ce que tu cherches.
Notamment pour ta fusion de string, je suppose, n’est pas une simple concaténation.

Pour compter l’occurrence d’un caractère, C# propose Linq, une sorte de SQL travaillant sur des collections d’objets. Une string étant considérée comme une collection de caractères, on peut écrire ceci
int combienDeS = "Mes mots contiennent-ils beaucoup de s?".Count(x => x == 's');
Et là encore ça tient sur une ligne claire et concise.
Selon ce post https://stackoverflow.com/questions/1217228/what-is-the-java-equivalent-for-linq il existe des équivalents en Java
0
pgl10 Messages postés 366 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 17 mai 2023 9
Modifié le 19 oct. 2020 à 13:29
Bonjour toyo2020,
Il serait indispensable de préciser la question "est-ce que vous connaissez un tel langage ?"
ainsi que la signification de "type primitif".
Voir https://fr.wikipedia.org/wiki/Type_(informatique) pour ce qui concerne le typage des données en programmation informatique.
Si on a une donnée de type couleur on pourra demander quelle est la couleur de cette donnée ? Mais on ne pourra jamais demander quelle est la couleur du nombre 123 ?
De même on pourra demander quel est l'age actuel de monsieur <untel> si une donnée de type de monsieur comporte nécessairement sa date naissance mais on ne pourra jamais demander quel est l'age actuel de la touche <majuscule>.
Je dis cela parce que les divers langages de programmation Java, C, C++, C#, etc. ont tous la possibilité de créer et de traiter des données de types définis par l'utilisateur et il existe des bibliothèques qui fournissent à l'avance des solutions pour de nombreux types de données usuels sans avoir à les programmer soi-même. C'est pourquoi il me semble indispensable d'expliquer la question : "est-ce que vous connaissez un langage ayant un nombre très élevé de types primitifs ?"
Il semble que si "type primitif" signifie "type prédéfini" la réponse est : aucun. Par contre, si "type primitif" signifie "type composé" alors la réponse est : presque tous.
Bien à vous, pgl10


0
toyo2020 Messages postés 45 Date d'inscription jeudi 15 octobre 2020 Statut Membre Dernière intervention 11 octobre 2022
26 oct. 2020 à 07:44
Ce que tu me dis sur KX me plait Whismeril, je viens de réaliser une recherche sur Google [langage KX]. Ce langage doit être récent et il est encore confidentiel car les résultats de recherche y sont rare et tous pointant vers des sites anglophones. Bon je vais lire tout cela en anglais à défaut du français.
0
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 624
26 oct. 2020 à 08:00
Ben en fait, je ne connais pas ce langage, moi je parlais de la personne dont le pseudo est KX, qui est intervenue sur cette discussion.
Et pour le connaitre (virtuellement parlant) depuis des années, je sais que son niveau en Java est très bon
0
toyo2020 Messages postés 45 Date d'inscription jeudi 15 octobre 2020 Statut Membre Dernière intervention 11 octobre 2022
26 oct. 2020 à 08:01
J'ai fait des études de math&informatique, oui je sais ce qu'est un type primitif pgl10 2

Je cherche un langage où de nombreux "type composé" soient aussi des "type prédéfini", je cherche donc un langage où il n'y aurait pas que les "type simple" qui soient des "type prédéfini"
0
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 624
26 oct. 2020 à 08:03
et donc en citant le message de KX du 17 octobre
En Java, je parlerais plutôt de classes standards, c'est à dire celles spécifiées dans l'API Java (Standard Edition) et qui sont donc directement accessibles dans un programme Java.
En Java 15 (la dernière version), il y en a 4400 :


Ces 4400 classes sont prédéfinies, je ne sais pas ce que tu considères comme nombreux, mais pour moi 4400 ça l'est.
0