Μπορεί ένας βρόχος ‘for’ μέσα σε έναν βρόχο ‘for’ να χρησιμοποιεί το ίδιο όνομα μεταβλητής μετρητή

Disappear
2 min readSep 24, 2022

--

Μπορείτε να χρησιμοποιήσετε το ίδιο όνομα (αναγνωριστικό). Θα είναι ένα διαφορετικό αντικείμενο. Δεν θα επηρεάσουν ο ένας τον άλλον. Μέσα στον εσωτερικό βρόχο, δεν υπάρχει τρόπος αναφοράς στο αντικείμενο που χρησιμοποιείται στον εξωτερικό βρόχο (εκτός εάν προβλέπετε ειδικές διατάξεις για αυτό, όπως παρέχοντας έναν δείκτη σε αυτό).

Αυτό είναι γενικά κακό στυλ, είναι επιρρεπές σε σύγχυση και πρέπει να αποφεύγεται.

Τα αντικείμενα είναι διαφορετικά μόνο εάν το εσωτερικό ορίζεται ξεχωριστά, όπως με το int i έχετε δείξει. Εάν χρησιμοποιείται το ίδιο όνομα χωρίς να οριστεί νέο αντικείμενο, οι βρόχοι θα χρησιμοποιούν το ίδιο αντικείμενο και θα παρεμβάλλονται μεταξύ τους.

Πρώτον, αυτό είναι απολύτως νόμιμο:ο κώδικας θα μεταγλωττιστεί και θα εκτελεστεί, επαναλαμβάνοντας το σώμα του ένθετου βρόχου 10×10=100 φορές. Μετρητής βρόχου i μέσα στον ένθετο βρόχο θα κρύβεται ο μετρητής του εξωτερικού βρόχου, επομένως οι δύο μετρητές θα αυξάνονται ανεξάρτητα ο ένας από τον άλλο.

Από το εξωτερικό i είναι κρυφό, ο κώδικας μέσα στο σώμα του ένθετου βρόχου θα έχει πρόσβαση μόνο στην τιμή του i του ένθετου βρόχου, όχι i από τον εξωτερικό βρόχο. Σε περιπτώσεις όπου ο ένθετος βρόχος δεν χρειάζεται πρόσβαση στο εξωτερικό i ένας τέτοιος κώδικας θα μπορούσε να είναι απολύτως δικαιολογημένος. Ωστόσο, αυτό είναι πιθανό να δημιουργήσει μεγαλύτερη σύγχυση στους αναγνώστες του, επομένως είναι καλή ιδέα να αποφύγετε τη σύνταξη τέτοιου κώδικα για να αποφύγετε "υποχρεώσεις συντήρησης".

Σημείωση: Παρόλο που οι μεταβλητές μετρητή και των δύο βρόχων έχουν το ίδιο αναγνωριστικό i , παραμένουν δύο ανεξάρτητες μεταβλητές, δηλαδή δεν είστε χρησιμοποιώντας την ίδια μεταβλητή και στους δύο βρόχους. Η χρήση της ίδιας μεταβλητής και στους δύο βρόχους είναι επίσης δυνατή, αλλά ο κώδικας θα ήταν δύσκολο να διαβαστεί. Ακολουθεί ένα παράδειγμα:

for (int i = 1 ; i < 100 ; i++) {
for ( ; i % 10 != 0 ; i++) {
printf("%02d ", i);
}
printf("%d\n", i);
}

Τώρα και οι δύο βρόχοι χρησιμοποιούν την ίδια μεταβλητή. Ωστόσο, χρειάζεται λίγος χρόνος για να καταλάβετε τι κάνει αυτός ο κώδικας χωρίς να τον μεταγλωττίσετε (demo);

  1. Εκτελέστε εργασία με το CurrentCulture που έχει οριστεί στο Task Creator CurrentCulture
  2. αφαιρέστε την κλάση css στον κώδικα πίσω
  3. Πώς μπορώ να περάσω ένα αντικείμενο στο HttpClient.PostAsync και να το σειριοποιήσω ως σώμα JSON;
  4. Εισαγάγετε μια νέα σειρά στο DataTable
  5. Ισχυρή τυπική έκφραση κωδικού πρόσβασης που ταιριά

--

--