Wer die bessere Geschichte hat, gewinnt.

Todesengelprogramm oder def werLebtNoch():

Bei mei­nen frü­he­ren Büchern gab es viel zu recher­chie­ren – hier, beim »Mau­er­seg­ler« zur Abwechs­lung mal etwas zu programmieren.

Zu dem Pakt, den die fünf Alten schlie­ßen, gehört der gegen­sei­ti­ge Bei­stand in der Ster­be­stun­de. Jeder soll sich den­je­ni­gen erwäh­len, den er in die­sem Moment an sei­ner Sei­te haben will. Ernst, der Pro­gram­mie­rer unter den fün­fen, schreibt dafür ein Pro­gramm. Die­ses soll einen gere­gel­ten Wahl­vor­gang garan­tie­ren, die Ergeb­nis­se ver­trau­lich kap­seln, und dann, wenn es ernst wird, die Benach­rich­ti­gung aussenden.

Das war so die Idee.

Aber funk­tio­nie­ren soll­te sie auch. Also habe ich das Pro­gramm – so neben­her zur Arbeit am Roman – ent­wi­ckelt. Eine zwei­te Sprach­ebe­ne, sozu­sa­gen. Eine Bei­spiels­funk­ti­on daraus:

def werLebtNoch():
    bewohner_aktuell = []
    try:
        dahingegangen = DateiManager.lese("src/data/", "verstorben.log")
    except:
        dahingegangen = None
    if dahingegangen is None:
        pass
    else:
        if wgliste[0] in dahingegangen:
            ui.checkbox_name1.setCheckState(True)
            ui.button_name1.setEnabled(False)
            ui.editFeld_1.enabled = False
            ui.meldung_name1.setEnabled(False)
        else:
...

Jeder Pro­gramm­text (auch der Code-Schnip­sel oben, geschrie­ben in Python 3) folgt nicht nur einer Recht­schrei­bung (Syn­tax), einer Gram­ma­tik, son­dern – das ist für mich das Fas­zi­nie­ren­de am Pro­gram­mie­ren –, ermög­licht auch einen Stil, einen indi­vi­du­el­len Aus­druck. Der sel­be Out­put lässt sich auf vie­le Wei­sen errei­chen. Aber ele­gant ist die Knapp­heit, der direk­te Ansatz, der­je­ni­ge, der das Ziel mit dem gerings­ten Auf­wand und der größ­ten (schein­ba­ren) Leich­tig­keit erreicht.

Das ist im Grun­de nicht viel anders als das Roman­schrei­ben (für mich jeden­falls). Sicher, da hat man dazu noch die Grau­schat­tie­run­gen, die Bedeu­tungs­un­schär­fen der natür­li­chen Spra­che, die Leer­stel­len, das nicht Gesag­te, all die Mög­lich­kei­ten der Kos­tü­mie­rung, und des­halb auch die Mög­lich­keit der Ent­blö­ßung, des kla­ren, unver­kleis­ter­ten Tex­tes. Pro­gramm­text ist dage­gen gewis­ser­ma­ßen immer schon nackt und unzweideutig:

try:
     dahingegangen = DateiManager.lese("src/data/", "verstorben.log")
except:
     dahingegangen = None

Das kann im Grun­de jeder lesen. Es ist eine Anwei­sung, die Varia­ble dahin­ge­gan­gen mit Daten zu fül­len, die ein Datei­Ma­na­ger aus einer Datei namens verstorben.log im Ver­zeich­nis src/data lesen soll. Ein Ver­such, also try:, weil das Lesen fehl­ge­hen kann; ent­we­der, weil die Datei nicht exis­tiert oder nichts ent­hält. Und except: weil die Varia­ble für den Feh­ler-Fall den Wert None zuge­wie­sen bekommt. Im Klar­text: »dahin­ge­gan­gen« ist die Lis­te der­je­ni­gen, die in der Datei »verstorben.log« gespei­chert sind.

Kann jemand ver­ste­hen, dass sol­che Pro­gramm­zei­len zu schrei­ben mir ähn­lich Spaß macht wie das Schrei­ben einer (gelun­ge­nen) Romanzeile?
Wei­ter: wgliste[0] bezeich­net den ers­ten in der alpha­be­ti­schen Lis­te der WG-Bewoh­ner, Carl, den Erzähler.

if wgliste[0] in dahingegangen:
      ui.checkbox_name1.setCheckState(True)
      ui.button_name1.setEnabled(False)
      ui.editFeld_1.enabled = False
      ui.meldung_name1.setEnabled(False)
else:

Wenn Carl in der Lis­te der Dahin­ge­gan­ge­nen steht, ist er offen­sicht­lich ver­stor­ben. Also erhält das »Verstorben«-Kästchen neben sei­nem Namen ein Häk­chen (setCheckState(True)), und noch ein paar ande­re Din­ge wer­den ent­spre­chend eingerichtet.

Ich bin bei wei­tem kein per­fek­ter Pro­gram­mie­rer – aber das »Todes­en­gel­pro­gramm« aus dem Mau­er­seg­ler funk­tio­niert, wie dort beschrie­ben. Oder folgt der Roman der Pro­gram­mie­rung? Wer weiß.

Wer’s aus­pro­bie­ren möch­te, auf dem eige­nen PC, kann das tun.