disclaimer: implementatie is C++Tuurlijk, als je dat zou willen: geen probleem, ga je gang. Sterker: je hebt kennelijk geen idee hoe vaak dat gebruikt wordt, en hoe zinvol dat kan zijn. Duik maar eens in bijvoorbeeld een Linux kernel source. Daar vind je aan de lopende band toepassing van een constructie als
C:
1
| #define DO_ONCE(BLA) do { BLA; } while (0) |
En dat wordt niet voor niets gebruikt. Heb je enig idee waarom?
Maar als je toch op die toer gaat, dan kan je nog wel aanzienlijk vreemdere dingen doen, zoals deze
POD_bom. Of je ook zou willen dat iemand in teamverband zoiets doet, is vraag 2

.
en functies hoeven niet per se een functioneel geheel te zijn maar die kun je naar eigen inzicht door elkaar rijgen totdat je een lappendeken hebt die niemand meer begrijpt?

Dat zijn jouw woorden, waar ik mij om begrijpelijke redenen van distantiëer.
Exceptions zijn niet voor niets exceptions genoemd. Een exceptie is volgende het woordenboek een uitzonderingssituatie. Die naamgeving is écht niet zomaar gekozen door de ontwikkelaars van de taal. Bij het lezen van een bestand wéét je dat EOF eraan komt, dus het is ook géén uitzondering wanneer dat gebeurt. Om die reden is het wat mij betreft ook erg krom om uitgerekend daarvoor een exception te gaan misbruiken.
En wat betreft degene die hierboven riep dat het gebruik van een extra "&& !EOF" in elke loop/if in een constructie minder leesbaar is dan uit de constructie springen met een exception: wat rook jij?

Het kost geen moeite om die extra 7 karakters op te nemen, en het blijft leesbaarder dan wanneer je uit je code breekt.

Vier dingen.
1) Lees mijn post hierover nog eens, maar dan wat nauwkeuriger. Ik sprak niet over 7 karakters, maar over aanzienlijk meer dan dat.
2) Het besparen van 7 karakters heeft tot gevolg dat ergens anders 100+ karakters opgenomen moeten worden voor het gooien en afvangen van de door mij gesuggereerde exception. Dat is iha. zonde van de moeite. Je opmerking is dus niet logisch.
3) Ik had het dus niet primair over "&& !EOF", maar over "! bUnexpectedEOF". Daar zit een aanzienlijk verschil tussen, en wel:
unexpected EOF is in mijn scan-deel niet van belang voor het normale executie-pad
.
Dat onderscheid is er, ik ben me er van bewust, en ik houd daar rekening mee.
Merk op dat een van de dingen waar je als programmeur tijdens je loopbaan mee in aanraking komt, het spanningsveld is tussen de toenemende grootte van de projectcode, en de capaciteit van het menselijke korte- en lange-termijn geheugen. Een van de manieren waarop ik daar mee om ga, is verdeel-en-heers. Als ik besluit dat het afhandelen van een unexpected-EOF situatie in mijn scanner irrelevant is voor het normale executie-pad, dan wil ik tests daarop bij voorkeur niet in dat deel van mijn code zien dat zich bezig houdt met dat normale executie-pad. Ik wéét dat de kans op een UEOF bestaat, ik wéét dat ik die situatie correct afvang, dus ik hóef, nee ik wíl de code van het scan-deel niet
vervuilen met code die daar niet noodzakelijk is. Wat is er in vredesnaam nou verwarrend aan deze aanpak?
Een van de talloze toepassing van dit principe is het Iterator Pattern, waarbij het lopen langs een container losgekoppeld is van de container-structuur. Omdat je na het bepalen van het geschikte container-type tijdens het itereren niet hoeft na te denken over de interne details van de container-structuur implementatie, houd je meer geestelijke capaciteit over voor de rest van je programma. En als je dit voorbeeld banaal vindt klinken, probeer dan nog eens goed na te denken over het principe. Dáar gaat het mij om.
4) Het is eenieders volste recht om kritiekloos af te gaan op wat anderen zeggen. Dus als je iemand hoort beweren dat 'arrays are evil because we do have containers' , 'meer dan 1 return in een functie is evel', of dat 'Exceptions niet voor niets exceptions zijn genoemd', daar zonder meer in mee te gaan. Dat is een al dan niet bewuste keuze die je maakt.
Maar ik ben glashelder van mening dat het voor je ontwikkeling als SD een goed idee is om af en toe serieus en niet dogmatisch over dit soort zaken na te denken, en bij voorschrijdend inzicht je mening bij te schaven...
Zie ook het type-3 programmeur van flowerp.