Αυτό που ίσως δεν είναι τόσο συνηθισμένο, είναι το πέρασμα της λίστας by reference στην list_insert(), που είναι και ο βασικός λόγος που την έχω κάνει να επιστρέφει Boolean τιμή. Αυτή την υλοποίηση είναι πιο εύκολο να την παρακολουθήσει κάποιος που προέρχεται από άλλες γλώσσες, διότι όταν καλείται η συνάρτηση στην main() ο τελεστής & μπροστά από το όρισμα list κάνει και συντακτικά σαφές πως η λίστα αλλάζει μέσα στην list_insert().
Μια εναλλακτική υλοποίηση, και μάλλον πιο συνηθισμένη, είναι η λίστα να περνιέται by value μέσα στην list_insert() αλλά τότε η συνάρτηση θα πρέπει να επιστρέφει την αρχή της λίστας, η οποία θα πρέπει κατόπιν να εκχωρηθεί στον δείκτη της λίστας στην main().
Δηλαδή:
- Κώδικας: Επιλογή όλων
List *list_insert( List *list, int data)
{
... // παραλλαγμένος κώδικας
return list;
}
// -------------------------------------------------------------------------------
int main( void )
{
int data = ...;
List *list = NULL;
list = list_insert( list, data );
...
list_destroy( &list );
...
}
Ο "παραλλαγμένος κώδικας" αυτής της εκδοχής της list_insert() είναι πιο σύντομος και πιο... C like (αν θέλετε να σας τον γράψω κι αυτόν), αλλά έχει το επιπλέον overhead στην main(), όπως εξήγησα πριν. Όλο μαζί, μάλλον μπερδεύει περισσότερο τον αρχάριο συγκριτικά με τον κώδικα που έδωσα παραπάνω (αν κι αυτός ενδέχεται να μπερδέψει τοπικά τον αρχάριο, λόγω του διπλού δείκτη που χρησιμοποιεί μέσα στην συνάρτηση).
Off topic:
Σε ότι αφορά τώρα το αποθετήριο, ειλικρινά δεν καταλαβαίνω γιατί θα πρέπει να κάτσω να μάθω κάτι που δεν μου χρειάζεται ούτε προσωπικά ούτε εξυπηρετεί κατά την άποψή μου καλύτερα τις ανάγκες παρουσίασης κώδικα σε ένα προγραμματιστικό φόρουμ.
Δηλαδή όλοι όσοι διαβάζουν το φόρουμ αυτό για να μπορέσουν να αποκτήσουν πρόσβαση στους κώδικες που παρουσιάζουμε (που ουσιαστικά είναι snippets) θα πρέπει πρώτα να κάτσουν να μάθουν πως δουλεύουν τα αποθετήρια; Το βρίσκω παράλογο!
Η προσωπική μου άποψη είναι πως τόσο το code-tag του φόρουμ για μικρά αποσπάσματα, όσο και sites όπως τα ideone.com & codepad.org για μεγαλύτερα, είναι υπερ-αρκετά για τους σκοπούς που εξυπηρετεί ένα γενικό φόρουμ προγραμματισμού, όπως αυτό.
Αν ήμασταν μια ομάδα ανάπτυξης λογισμικού που είχαμε κοινό στόχο την ανάπτυξη μιας εφαρμογής, για την οποία ο καθένας από εμάς είχε αναλάβει να γράψει κώδικα σε επιμέρους τομείς, τα οποία μέρη έπρεπε να εξετάζουν ή/και να χρησιμοποιούν και τα υπόλοιπα μέρη του team, τότε ναι το καταλαβαίνω να χρησιμοποιούσαμε και αποθετήρια και revision control systems (και τηλεδιασκέψεις :p) και να καθόμουν να μάθω ότι χρειαζόταν για την επίτευξη του κοινού τελικού στόχου.
Τώρα όμως γιατί; Απλά για να λέμε πως ξέρουμε να χρησιμοποιούμε αποθετήρια. Και οκ πες ότι εμείς ξέρουμε, ή μαθαίνουμε... όλοι οι υπόλοιποι που ενδεχομένως θέλουν να δουν τον κώδικά [που παρουσιάζουμε για ποιον ακριβώς πρέπει να εξαναγκαστούν να χρησιμοποιήσουν αποθετήριο;
Εν πάσει περιπτώσει, αυτή είναι η προσωπική μου άποψη και όπως δεν προσπαθώ να την επιβάλλω σε κανέναν, έτσι θα ήθελα να μην προσπαθείτε να μου επιβάλλετε τη δική σας. Θέλω να πιστεύω πως η συμμετοχή μου σε αυτό το φόρουμ κινείται σε πλαίσια που ούτε προσβάλλουν ούτε "εκβιάζουν" (εντός εισαγωγικών) κανέναν για τις επιλογές του και άρα δεν δυσχεραίνουν την ομαλή λειτουργία του και όσων το διαβάζουν. Και σίγουρα δεν αισθάνομαι μειονεκτικά επειδή επιλέγω να μη χρησιμοποιώ αποθετήρια για τον κώδικα που παρουσιάζω.