Apeliavimas į tikimybę (programavimo klaida)
Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Apeliavimas į tikimybę – klasikinės apeliavimo į tikimybę klaidos pasitaikymas programuojant. Ją darydamas nepatyręs programuotojas mano, jog labai mažai tikėtinas dalykas tikrai niekada neatsitiks ir nepasirūpina šiam atvejui tinkamais programos veiksmais.
[taisyti] Pavyzdys
"Klasikinis" tokios klaidos pavyzdys – tuščias išimties sugavimo sakinys.
(...) String mūsų_metodas(Document dokumentas) { try { (7892 eilutės algoritmo kodo)
Ši funkcija gali mesti BadLocationException, priversdama rašyti jos sugavimo sakinį: dokumentas.insertString(p, s, a);
(dar 2458 eilutės kodo)
return kažkoks_tekstas; } catch (BadLocationException e) { // Tai niekada negali atsitikti, nes mes labai atidžiai // patikrinome algoritmą. return „“; Kadangi mūsų_metodas privalo grąžinti reikšmę, programuotojas priverčiamas taip pat parašyti grąžinimo sakinį. } } (...)
Nepatyręs programuotojas rašo komentare turįs priežasčių manyti, jog nei dabar, nei kada nors ateityje galbūt pakeitus dalį kodo išimtis niekada nebus mesta. Aukšto lygio programavimo kalba jį privertė parašyti sugavimo sakinį, bet jis išsisuko tiesiog grąžindamas tuščią eilutę.
Jei kartais tokia išimtis visgi bus mesta, ši tuščia eilutė, žinoma, neturės nieko bendro su tuo, ko laukia metodą kviečianti vartotojo programa. Jei grąžintas rezultatas įsimenamas ir panaudojamas ne iškart, galima atidėta katastrofa.
Tokių ir panašių konstrukcijų praeityje būta daugelyje projektų, jų autoriai teigė jog jos liudija gerą nusimanymą, sugebant numatyti, ko tikrai niekada nebus (kartu darant dar ir tobulo sprendimo klaidą). Deja, „negalimi dalykai“ įvairiose programose jau yra atsitikę daugybę kartų. Net ir teisingame kode juos kai kada sukelia kompiliatoriaus, vykdančios sistemos, kviečiamų bibliotekinių funkcijų ir kitos panašios klaidos. Todėl savo algoritmu tikras programuotojas tokioje vietoje turi mesti specialią klaidos išimtį, kuri praneštų apie klaidą, paprastai kartu nutraukdama programos darbą.