1.5 Τα Πρώτα μας Βήματα
© Γιάννης Κωστάρας
< | ∆ | > |
Μαθησιακοί στόχοι
Σε αυτήν την ενότητα θα μάθουμε:
- από τι αποτελείται μια γλώσσα προγραμματισμού
- να γράφουμε το πρώτο μας πρόγραμμα σε Java
- τις διάφορες κατηγορίες λαθών (bugs)
- πώς να σχολιάζουμε τον κώδικά μας
Από τι αποτελείται μια γλώσσα προγραμματισμού
Σ’ αυτό το μάθημα θα κάνουμε τα πρώτα μας βήματα στη γλώσσα προγραμματισμού Java.
Ένα πρόγραμμα Java μοιάζει με μια ιστορία που λέμε στον Η/Υ για να την εκτελέσει. Κάθε πρόταση (δηλ. εντολή) τερματίζεται με την αγγλική άνω τελεία, δηλ. το ελληνικό ερωτηματικό (;).
Η γλώσσα Java αποτελείται από: λέξεις-κλειδιά (keywords), μεταβλητές (variables ή identifiers), σταθερές (constants ή literals), τελεστές (operators) και σημεία στίξης (punctuators).
Οι λέξεις-κλειδιά (keywords) είναι δεσμευμένες λέξεις που αποτελούν τις εντολές της γλώσσας (π.χ. int, String, for, public, try
).
Οι μεταβλητές (variables ή identifiers) είναι, όπως θα δούμε, διευθύνσεις μνήμης για ν’ αποθηκεύουμε δεδομένα ή αποτελέσματα πράξεων.
Οι σταθερές (constants ή literals) είναι επίσης θέσεις μνήμης που αποθηκεύουν δεδομένα που δεν μπορούν να μεταβληθούν κατά την εκτέλεση του προγράμματος.
Οι τελεστές (operators) είναι διάφορες πράξεις που υποστηρίζει η γλώσσα (π.χ. +, %, ++, && <=
) και χρησιμοποιούνται σε εκφράσεις.
Τα σημεία στίξης (punctuators) είναι χαρακτήρες που έχουν ειδικό νόημα για τον μεταγλωττιστή (π.χ. ; , . { }
).
Το πρώτο μας πρόγραμμα
Σε αυτήν και την επόμενη εβδομάδα θα δουλέψουμε με το JShell. Αν έχετε εγκαταστήσει το JDK και έχετε θέσει σωστά το PATH
στο Λ.Σ. σας όπως περιγράψαμε στο προηγούμενο μάθημα, τότε δώστε την εντολή jshell
σε ένα παράθυρο DOS στα Windows είτε σε ένα κέλυφος του Linux/MacOS (είτε στα online):
$ jshell
| Welcome to JShell -- Version 17
| For an introduction type: /help intro
jshell> System.out.println("Hello world!")
Hello world!
Η εντολή System.out.println
μας επιτρέπει να εμφανίσουμε κάτι στην μονάδα εξόδου (δηλ. την οθόνη μας), αυτό που περιέχεται μέσα στα εισαγωγικά ("
), το οποίο ονομάζεται όρισμα (argument). Πώς μπορείτε να εμφανίσετε το μήνυμα: Γειά σου κόσμε!
;
Στο JShell φυσικά δεν χρειάζεται να δώσετε την εντολή System.out.println
για να εμφανίσετε κάτι στην έξοδο, αλλά σε ένα πραγματικό πρόγραμμα, όπως θα δούμε στα μαθήματα των επόμενων εβδομάδων, η εντολή αυτή είναι απαραίτητη.
Το “Hello world!”, όπως θα μάθουμε και σε επόμενο μάθημα, ονομάζεται συμβολοσειρά ή αλφαριθμητικό ή String. Μπορούμε να συγχωνεύσουμε δυο ή περισσότερες συμβολοσειρές με τον τελεστή +
. Π.χ.
jshell> System.out.println("Hello" + "world!")
Helloworld!
Μάλλον ξεχάσαμε κάποιο κενό.
jshell> System.out.println("Hello " + "world!")
Hello world!
Η εντολή println
προσθέτει μια αλλαγή γραμμής στο τέλος της συμβολοσειράς.
jshell> System.out.println("Hello"); System.out.println("world!");
Hello
world!
Παρατηρήστε ότι εφόσον παραθέτουμε δυο εντολές στην ίδια γραμμή, πρέπει να τις διαχωρίσουμε με το ;
. Υπάρχει όμως και η εντολή print
που δεν προσθέτει αλλαγή γραμμής:
jshell> System.out.print("Hello"); System.out.println(" world!");
Hello world!
Τι θα συμβεί αν ξεχάσουμε τα εισαγωγικά;
jshell> System.out.println(Hello);
| Error:
| cannot find symbol
| symbol: variable Hello
| System.out.println(Hello);
|
Βλέπουμε ότι εμφανίζεται ένα λάθος (error) με το μήνυμα ότι δεν μπορεί να βρει το Hello
. Υπάρχουν δυο κατηγορίες λαθών:
- Λάθη μεταγλώττισης ή συντακτικά λάθη (syntax error), όπως το παραπάνω. Είναι λάθη που παραβιάζουν τους κανόνες της γλώσσας και μπορεί να τα βρει ο μεταγλωττιστής της γλώσσας, όπως στο προηγούμενο παράδειγμα.
- Λογικά λάθη ή λάθη εκτέλεσης (runtime error) τα οποία είναι λάθη που δεν μπορεί να εντοπίσει ο μεταγλωττιστής και προκαλούνται κατά την εκτέλεση του προγράμματος. Θα δούμε ένα λογικό λάθος παρακάτω.
Τι άλλο όμως μπορούμε να κάνουμε με τη γλώσσα; Αριθμητικές πράξεις φυσικά. Πρόσθεση (+), αφαίρεση (-), πολλ/σμό (*), διαίρεση (/), υπόλοιπο διαίρεσης (%). Παρατηρήστε ότι δεν χρειάζονται τα εισαγωγικά, καθώς δουλεύουμε με αριθμούς κι όχι με αλφαριθμητικά.
jshell> System.out.println(3 + 4);
7
jshell> System.out.println(3 - 4);
-1
jshell> System.out.println(3 * 4);
12
jshell> System.out.println(7 / 3);
2
jshell> System.out.println(7 % 3);
1
jshell> System.out.println(1 / 0);
| Exception java.lang.ArithmeticException: / by zero
| at (#9:1)
Στο τελευταίο παράδειγμα βλέπουμε ένα λογικό λάθος ή λάθος εκτέλεσης, τη διαίρεση με το μηδέν. Θα καταλάβουμε καλύτερα τη διαφορά των δυο αυτών τύπων λαθών όταν θα αρχίσουμε να γράφουμε πραγματικά προγράμματα στη Java.
Αν θέλουμε να εμφανίσουμε και την ίδια την πράξη εκτός από το αποτέλεσμα;
jshell> System.out.println("3 + 4 = " + 3 + 4);
3 + 4 = 34
Χμ! Όχι ακριβώς αυτό που θα περιμέναμε. Επειδή το όρισμα που περνάμε στην System.out.println()
ξεκινά με συμβολοσειρά, θεωρεί ότι όλο το όρισμα είναι συμβολοσειρά, με αποτέλεσμα να μετατρέπει τους αριθμούς σε συμβολοσειρές οπότε η τελεστής της πρόσθεσης (+
) μετατρέπεται σε τελεστή συγχώνευσης αλφαριθμητικών. Τι μπορούμε να κάνουμε σ’ αυτήν την περίπτωση; Υπάρχουν διάφοροι τρόποι, κάποιους από τους οποίους γνωρίζετε ήδη:
jshell> System.out.print("3 + 4 = "); System.out.println(3 + 4);
3 + 4 = 7
jshell> System.out.println("3 + 4 = " + (3 + 4));
3 + 4 = 7
Σχόλια
Η Java υποστηρίζει τριών ειδών σχόλια.
Σχόλιο μιας γραμμής:
int radius; // Αυτό είναι ένα σχόλιο μιας γραμμής
Σχόλιο πολλαπλών γραμμών:
/*
* Αυτό είναι ένα σχόλιο
* πολλαπλών γραμμών.
*/
int radius;
Σχόλιο τεκμηρίωσης (Javadoc):
/**
* Αυτό είναι ένα σχόλιο
* τεκμηρίωσης κώδικα (Javadoc).
*/
int radius;
Τα σχόλια Javadoc σας επιτρέπουν να τεκμηριώνετε τον κώδικά σας και να παράγετε τη διεπαφή των κλάσεών σας (Application Program Interface - API) σε μορφή HTML. Π.χ. εδώ βλέπετε το API των κλάσεων του JDK 17. Θα μάθουμε πώς να γράφουμε τα δικά μας σχόλια Javadoc σε επόμενο μάθημα.
Μπορείτε να πειραματιστείτε περαιτέρω εδώ .
Ασκήσεις
+---+---+---+
| | | |
+---+---+---+
| | | |
+---+---+---+
| | | |
+---+---+---+
2) Να γραφτεί ένα πρόγραμμα που να εκτυπώνει τα παρακάτω σχήματα:
* *
*** ***
***** *****
******* *******
********* *********
*** *******
*** *****
********* ***
*
< | ∆ | > |