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

Signaler
Messages postés
13
Date d'inscription
jeudi 15 octobre 2020
Statut
Membre
Dernière intervention
26 octobre 2020
-
Messages postés
14936
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 octobre 2020
-
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

Messages postés
14936
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 octobre 2020
447
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?

Messages postés
323
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
19 octobre 2020
2
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
Messages postés
16079
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
28 octobre 2020
102
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
Messages postés
472
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
26 octobre 2020
3
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
.
Messages postés
14936
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 octobre 2020
447
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.
Messages postés
13
Date d'inscription
jeudi 15 octobre 2020
Statut
Membre
Dernière intervention
26 octobre 2020

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
Messages postés
16079
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
28 octobre 2020
102
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).
Messages postés
14936
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 octobre 2020
447
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
Messages postés
323
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
19 octobre 2020
2
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


Messages postés
13
Date d'inscription
jeudi 15 octobre 2020
Statut
Membre
Dernière intervention
26 octobre 2020

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.
Messages postés
14936
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 octobre 2020
447
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
Messages postés
13
Date d'inscription
jeudi 15 octobre 2020
Statut
Membre
Dernière intervention
26 octobre 2020

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"
Messages postés
14936
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 octobre 2020
447
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.