Zoals ik
hier aangeef is voor dit topic het probleem niet zozeer die regex, maar het feit dat je hem uberhaupt wilt gebruiken.
je probleem zit hem in dat je op basis van een eigenschap iets wilt beslissen, maar daarvoor een eigenschap misbruikt.
Die variabelenaam is niet bedoelt om de beslissing op te maken of je .... (vul maar in)
Een variabelenaam is een variabelenaam.
tot zover dat.
Wat betreft regex (en andere 'ingewikkelde' constructies)
Ik werk in een professioneel bedrijf (hou ik mezelf voor) en daarin werken proffesionele mensen (hou ik mezelf ook voor)
Buiten de inhoudelijke kwaliteiten van mijn collega's om (of ze regex snappen of niet) ga ik er vanuit dat ze wel de hersens hebben om te weten dat je niet aan bestaande code gaat zitten als je het niet snapt.
Voor de meeste functies, en zeker de complexere (zoals functies die iets met ingewikkelde regex doen) bouw ik unit testen.
Zolang de unittest goed is hoeft er dus niemand met z'n tengels aan die functie te zitten.
Wanneer de functionaliteit veranderd zal je misschien een keer de code raken, en dan (en alleen dan) is het een valide argument om de regex te heroverwegen.
Het vervangen van regex omdat het regex is is gewoon NOT DONE.
if it ain't broke, don't fix it!
Verder heb ik al herhaaldelijk gezegt dat complexe code natuurlijk documentatie vereist. Een (elke) regex zou in mijn opinie vergezeld moeten gaan van een functionele beschrijving in de vorm van
a. inline commentaar
b. een unittest met alle scenario's
Waarom uberhaupt een regex gebruiken?
nou dat is een simpele. Regex is er niet voor niets. Het is de meest efficiente generieke manier om enkelvoudig door een string te lopen.
Je kunt specifieke code bouwen die hetzelfde doet, maar wanneer ik wil kijken of een stuk tekst een url bevat, en daar dan een ancher van maken (bijvoorbeeld) is een regex VEEL simpeler (en leesbaarder) dan een stuk code van 20 regels die hetzelfde doet.
En, minder foutgevoelig.
Je complete regex is namelijk de definitie van je probleem. Je bent niet bezig non-functional code te schrijven. Dit doe je wel als je geen regex gebruikt. Je gaat dan de non-functional code schrijven om door een string te lopen, je gaat de non-functional code schrijven om case-insensitive te matchen, je gaat de non-functional code schrijven die zorgt dat ... (vul maar in).
Meer code is grotere kans op menselijke fouten.
Ja ik ben het met jullie eens dat sommige regex slecht leesbaar is, en als je vaak aan die code komt is het een valide reden om geen regex te gebruiken.
Maar regex kan heel leesbaar zijn.
En nogmaals:
Er zijn vele vergelijkbare dingen waarvan ook niet wordt gezegt 'dan gebruiken we ze maar niet'
Ik noemde eerder al:
- onleesbare jquery dingen
- onleesbare xmlagg functies in sql
- onleesbare lambda expressions
Moeten we dan geen jquery, sql en lambda gebruiken?
volgens mij is 'ik snap het niet dus we gebruiken het niet' een erg slechte instelling.
ow en met een knipoog:
If it was hard to write, it should be hard to understand.
This message was sent on 100% recyclable electrons.