Formation Java / Spring Boot pour développeurs COBOL
À l’issue de cette quatrième journée, vous devez être capable de :
if
else
switch
for
while
String
Scanner
Les analogies COBOL sont encore présentes aujourd’hui, mais commenceront à s’estomper à partir du Jour 5.
En COBOL, les traitements sont souvent :
Exemples classiques :
Java permet exactement les mêmes traitements, mais avec :
L’objectif du jour est de retrouver vos repères COBOL en Java, sans encore parler d’objets.
J’ai conçu le cours de la manière suivante (comme le Jour 3) :
full Java
Dans ce cours, nous allons voir les structures de contrôles et les conditions
switch... case
while()
do... while()
foreach
regex
Lien vers les notions de base pour comprendre les Boucles
Lien vers les notions de base pour manipuler des Chaînes (String)
Lien vers quelques explications sur l’utilisation de printf pour le formatage
Lien vers les notions de base pour découvrir les expressions régulières (semaine 1 ou 2)
if (condition) { // instructions }
La condition doit obligatoirement être de type boolean.
En COBOL :
IF SOLDE < 0 DISPLAY "DECOUVERT" END-IF
En Java :
double
double solde = -15.56; if (solde < 0) { System.out.println("Compte à découvert de "+solde); }
BigDecimal
BigDecimal solde2 = new BigDecimal(solde); if (solde2.compareTo(BigDecimal.ZERO) < 0) { System.out.println("Compte à découvert"); }
Différences importantes :
{
}
Pour mieux comprendre le fonction et l’intérêt d’utiliser la classe BigDecimal dans le domaine bancaire
if (solde.compareTo(BigDecimal.ZERO) < 0) { System.out.println("Compte à découvert"); } else { System.out.println("Compte à l'équilibre ou créditeur"); }
Correspondance COBOL :
IF SOLDE < 0 DISPLAY "COMPTE A DECOUVERT" ELSE DISPLAY "COMPTE A L EQUILIBRE OU CREDITEUR" END-IF
if (solde.compareTo(BigDecimal.ZERO) < 0) { System.out.println("DECOUVERT"); } else if (solde.compareTo(new BigDecimal("1000")) < 0) { System.out.println("Solde faible"); } else { System.out.println("Solde confortable"); }
EVALUATE TYPE-COMPTE WHEN "CC" DISPLAY "COMPTE COURANT" WHEN "CE" DISPLAY "COMPTE EPARGNE" WHEN OTHER DISPLAY "TYPE INCONNU" END-EVALUATE
switch (typeCompte) { case "CC": System.out.println("COMPTE COURANT"); break; case "CE": System.out.println("COMPTE EPARGNE"); break; default: System.out.println("TYPE INCONNU"); }
Points clés :
default
WHEN OTHER
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10 ADD I TO TOTAL END-PERFORM
for (int i = 1; i <= 10; i++) { total = total.add(BigDecimal.valueOf(i)); }
while (solde.compareTo(BigDecimal.ZERO) > 0) { solde = solde.subtract(new BigDecimal("100")); }
La condition est testée avant chaque itération.
do { System.out.println("Traitement effectué"); } while (condition);
La boucle s’exécute au moins une fois.
Problème à résoudre
C’est exactement le type de traitement historiquement écrit en COBOL.
Démo – Traitement d’une série d’opérations
BigDecimal solde = new BigDecimal("1000.00"); BigDecimal[] operations = { new BigDecimal("-200.00"), new BigDecimal("150.00"), new BigDecimal("-50.00") }; for (int i = 0; i < operations.length; i++) { solde = solde.add(operations[i]); } System.out.println("Solde final : " + solde);
Analyse :
Objectif : appliquer une suite d’opérations à un solde
Consignes :
Objectif : analyser les opérations
Objectif : introduire une règle métier
Consigne :
int nbDebit = 0; int nbCredit = 0; for (int i = 0; i < operations.length; i++) { if (operations[i].compareTo(BigDecimal.ZERO) < 0) { nbDebit++; } else { nbCredit++; } } System.out.println("Nombre de débits : " + nbDebit); System.out.println("Nombre de crédits : " + nbCredit);
for (int i = 0; i < operations.length; i++) { solde = solde.add(operations[i]); if (solde.compareTo(BigDecimal.ZERO) < 0) { System.out.println("ATTENTION : DECOUVERT APRES OPERATION " + (i + 1)); } }
Aujourd’hui, on a vu :
Décision d’architecture progressive :
Vous savez maintenant :
Le Jour 5 abordera :