Page 1 sur 1

Amoureux du COBOL... vous allez être comblés !

Posté : 09 avr. 2018 17:13
par cquest
Pôle Emploi a ouvert le code source du calcul de certaines aides... un mix JAVA + COBOL ;)

https://www.data.gouv.fr/fr/datasets/ca ... mploi-are/

Re: Amoureux du COBOL... vous allez être comblés !

Posté : 09 avr. 2018 19:48
par Mokona
Le bonheur.

Re: Amoureux du COBOL... vous allez être comblés !

Posté : 09 avr. 2018 20:19
par cquest
Dans la partie en COBOL, on trouve des références à l'IBM-370, machine sortie en 1974.

Ça c'est du "legacy" !

Re: Amoureux du COBOL... vous allez être comblés !

Posté : 09 avr. 2018 20:33
par Carl
:)
370.jpg
370.jpg (255.6 Kio) Vu 294 fois

Re: Amoureux du COBOL... vous allez être comblés !

Posté : 09 avr. 2018 20:46
par Mokona
Je ne trouve que des fichiers en Java dans les deux archives... Même du grep sur DIVISION IDENTIFICATION ENVIRONMENT et autre ne me sort rien...

Où est la partie COBOL ?

Re: Amoureux du COBOL... vous allez être comblés !

Posté : 09 avr. 2018 23:45
par jimpqfly
Dans le second fichier zippé de 300ko, tu trouves 2 fichiers .TXT (DFMN3P.TXT et DFMNNP.TXT)
C'est ça.
Franchement c'est super léger, l'écrasante majorité est en Java (le code est bien obscur d'ailleurs, peu de commentaires, y'a des baffes qui se perdent...).

Image

Re: Amoureux du COBOL... vous allez être comblés !

Posté : 10 avr. 2018 10:17
par Mokona
Ah oui, vu, merci.

Ça manque de commentaires, certes, après, ils publient les sources mais il y a peut-être toute une documentation annexe qui n'est pas publiée (je passe sur cette pratique...)

Ce qui m'épate surtout, c'est le nombre de "valeurs magiques".

Code : Tout sélectionner

return (periode.getNature() == 46) || (periode.getNature() == 47) || (periode.getNature() == 45) || (periode.getNature() == 48) || (periode.getNature() == 44);

Code : Tout sélectionner

    ArrayList<Integer> listeNaturePeriodesSuspensives = new ArrayList();
    listeNaturePeriodesSuspensives.add(Integer.valueOf(55));
    listeNaturePeriodesSuspensives.add(Integer.valueOf(11));
    listeNaturePeriodesSuspensives.add(Integer.valueOf(56));
    listeNaturePeriodesSuspensives.add(Integer.valueOf(57));
    listeNaturePeriodesSuspensives.add(Integer.valueOf(58));
    listeNaturePeriodesSuspensives.add(Integer.valueOf(59));
Ce qui m'épate aussi, c'est qu'en regardant tout ce système, la complexité de l'administration se montre dans toute sa splendeur.

Re: Amoureux du COBOL... vous allez être comblés !

Posté : 10 avr. 2018 10:28
par __sam__
Punaise c'est ca leur code java ? Je ne sais pas quel stagiaire ou quelle SSII a écrit ca mais ce n'est pas du très beau code. Le truc avec les ou (||) serait plus efficace avec un switch:

Code : Tout sélectionner

	switch(periode.getNature()) {
		case magic1:
		case magic2:
		...
		case magicN:
			return true;
		default:
			return false;
	}
ou plus lisible avec les API des collections:

Code : Tout sélectionner

	return Arrays.asList(magic1,magic2,...,magicN).contains(periode.getNature());
Plus loin le valueOf() est inutile. Java fait le boxing/unboxing tout seul. Et aussi la variable locale listeNaturePeriodesSuspensives devrait être typée suivant le type le plus général (List ou Collection pour le cas présent). et là encore tout peut être écrit efficacement en une ligne:

Code : Tout sélectionner

	List<Integer> listeNaturePeriodesSuspensives  = Arrays.asList(11,55,56,57,58,59);
Après on s'étonne qu'il faut des grosses machines pour faire tourner tout ca. Java n'est pas le problème, la qualité du code oui en revanche.

Re: Amoureux du COBOL... vous allez être comblés !

Posté : 10 avr. 2018 11:38
par jimpqfly
Mouais attention, ils ont peut-être utilisé des outils pour convertir les sources d'un langage à un autre automatiquement...

Re: Amoureux du COBOL... vous allez être comblés !

Posté : 11 avr. 2018 11:07
par hlide
Non, __sam__, il y avait encore plus simple :

Code : Tout sélectionner

return (periode.getNature() == 46) || (periode.getNature() == 47) || (periode.getNature() == 45) || (periode.getNature() == 48) || (periode.getNature() == 44);
qui peut se réécrire si tu veux faire dans la performance :

Code : Tout sélectionner

int nature = periode.getNature(); return (nature >= 44) && (nature <= 48);
Et encore, en C++, ça peut se faire en une seule comparaison parce que Java ne connait pas les nombres non signés :

Code : Tout sélectionner

return unsigned(periode.getNature() - 44u) <= (48u - 44u);
La lisibilité aurait été meilleure si les valeurs été nommées.

Re: Amoureux du COBOL... vous allez être comblés !

Posté : 11 avr. 2018 12:21
par __sam__
oui j'avais pas vu que la séquence de natures était "sans trous" (hasard?). Avec les extensions gcc on peut aussi à ce moment là faire un case avec "..." que je trouve sympathique.

Code : Tout sélectionner

	switch(bidule.getNature()) {
		case 44...48: return true;
		default: return false;
	}
M'enfin bon après si le but est de pisser du code, je comprends que le stagiaire ne se soit pas cassé la tête (les valeurs dans le || apparaissant désordonnées semblent indiquer que ca a du évoluer en plusieurs étapes).

Re: Amoureux du COBOL... vous allez être comblés !

Posté : 11 avr. 2018 12:51
par cquest
Oups, ce sont les amoureux du java qui se sont réveillés ;)