
Regular Expressions: η "σκοτεινή μαγεία" του parsing.
Μακάρι να ήταν έτσι... στην πραγματικότητα είναι απλώς μια μπαγκαρισμένη κουράδα.
Εντάξει υπερβάλλω λίγο, αλλά άσε με να σου πω πώς κατέληξα σε αυτό το συμπέρασμα.
Η αρχή
Όπως ήδη ξέρεις, είμαι ο δημιουργός του StyleZero.
Το StyleZero λοιπόν έχει έναν parser.
Αυτός ο parser είχε φτιαχτεί εξαρχής με custom matching, χωρίς κόλπα τύπου regular expressions και τέτοια.
Κάποια στιγμή ακούω τη συμβουλή ενός developer στο Facebook που έλεγε ότι του έσωσαν πολλές ώρες δουλειάς τα reg exp.
Ο συγκεκριμένος dev είναι πολύ έμπειρος, και λέω
δε βαριέσαι… βάζω κι εγώ!
Η εφαρμογή
Προφανώς να γράψω χύμα όλο το απαραίτητο reg exp κατεβατό του stylezero δεν έβγαινε, οπότε το χώρισα σε μεταβλητές.
Το τελικό αποτέλεσμα ήταν ένα ακαταλαβίστικο μακρινάρι, που όμως λειτουργούσε!
Χωρίς να τα πολυλογώ, κατάφερα να βγάλω δουλειά, προηγουμένως μοιρασμένη σε αρκετά αρχεία, μέσα σε μία μόνο function.
Φαινόταν φανταστικό!
Όλα λειτουργούσαν άψογα, μέχρι που... δεν λειτουργούσαν.
Χαχα
Τι έγινε λοιπόν
Ένας συνάδελφος που έχει πορωθεί με το StyleZero παραπονιόταν ότι με το να βάζει συγκεκριμένα SVGs στο template, το StyleZero απλώς δεν έκανε compile.
Γενικά τίποτα ακραίο, αφού είχε βρει workaround.
Αλλά πέρα από το ότι πέτυχα την ίδια συμπεριφορά και σε άλλες περιπτώσεις, ήθελα να μάθω τι φταίει.
Κάνοντας διάφορες δοκιμές και αφαιρώντας κομμάτια από το template, τελικά κατέληξα ότι το StyleZero μπαγκάρει σε ένα alphanumeric από 13 έως 16 χαρακτήρες.
Στην αρχή μου φάνηκε αστείο, αφού από τη μία έκανε parsing τεράστια templates χωρίς πρόβλημα, και από την άλλη έφτανε να φτιάξω ένα απλό αρχείο με ένα κείμενο σαν αυτό για να το μπαγκάρω:
234n905ct395945
Τέλος πάντων, μετά από έρευνα διαπίστωσα ότι τα regular expressions έκαναν το έγκλημα.
Αναγκάστηκα να το πάρω σερί για 3-4 μέρες να ξαναγράψω τον parser από την αρχή, για να βγει η έκδοση 9.2.1.
Γενικά πάντως μπορώ να πω ότι μου βγήκε σε καλό, γιατί ουσιαστικά ο καινούργιος parser είναι πολύ καλύτερος από τον παλιό και σε δομή, και στον τρόπο λειτουργίας.
Η συμβουλή μου λοιπόν είναι η εξής:
Οκ, χρησιμοποίησε regular expressions... αλλά με το μαλακό.
Γενικά θεωρείται τσαπατσουλιά, οπότε μόνο για απλά πράγματα.
Γραμμένο από: Άνθρωπο
Μετάφραση από: AI