Suchen

Implementierung

Nutzen Sie die Macht der Sprache

Seite: 2/3

Firma zum Thema

Jede Sprache hat die Eigenschaft, dass sich Sätze unterschiedlich formulieren lassen. Beispiele dafür sind Kommasetzung oder Rechtschreibung. Menschen erkennen den Sinn eines Satzes auch, wenn dieser leicht falsch geschrieben ist oder ein Komma fehlt.

Unser bester Freund, der Compiler, versucht Menschen nachzueifern. Er versucht, solange semantisch korrekt, jeglichen Code in eine ausführbare Form zu übersetzen. Dieser Code ist dann in den allermeisten Fälle lauffähig.

(Bild: Andreas Fertig)

Das im Quellcode genannte Beispiel ist übersetzbar und lauffähig. Wahrscheinlich würde kaum ein Programmierer an dieser Stelle einen float verwenden. Ungeachtet dessen gilt: es compiliert und läuft!

Was nicht erkennbar ist, ist die Intention des Autors. Gab es einen Grund den Datentyp float zu verwenden oder war es schlicht Unkenntnis? Sofern der Einsatz von float Absicht war, sollte der Grund direkt an der eingesetzten Stelle kommentiert werden.

Weniger auffällig sind Beispiele mit Referenzen, Zeigern oder const. Speziell C-Entwickler neigen dazu aus Gewohnheit Zeiger zu verwenden. Zeiger funktionieren semantisch fast genauso wie Referenzen. Dabei haben Referenzen zwei entscheidende Vorteile: sie können nie NULL sein und sie müssen immer direkt initialisiert werden.

Wenn wir einen Zeiger als optional interpretieren und Referenzen als erforderlich, haben wir ein gutes Stück Ausdrucksmöglichkeit gewonnen. Eine Funktion, die eine Referenz als Parameter entgegen nimmt, erfordert demnach einen Wert. Nimmt die gleiche Funktion einen Zeiger entgegen, ist der Wert optional und kann durch NULL weggelassen werden.

Jetzt ist es die Aufgabe der gerufenen Funktion mit dem Umstand eines NULL-Zeigers zurecht zu kommen. Im Falle der Referenz als Parameter spart sich der Autor nebenbei auch die oft lästige NULL-Zeigerprüfung im Funktionsrumpf. Ein positiver Nebeneffekt ist, dass der resultierende Code kleiner ist und die Prüfung nicht vergessen werden kann.

Weiter signalisiert eine Referenz bereits nach außen, dass die Funktion ist nur mit validen Werten aufrufbar ist. Ein anderes Beispiel ist const. Bei einem Parameter kann der Aufrufer sich darauf verlassen, dass die übergebenen Daten unverändert bleiben.

Eine komplette Funktion kann als Konstant markiert werden. Ein Aufruf verändert dann die Klasse nicht. Bauen wir die const-Hierarchie weiter aus, erhalten wir ein vollständiges konstantes Objekt.

Im Bereich eingebetteter Systeme ist das ein hohes Gut, da das Objekt nie kopiert oder initialisiert werden muss. Es kann direkt im ROM, Read-only Memory, abgelegt werden. In diesem Fall wird die Kommunikation mit dem Compiler effektiv genutzt.

(ID:44600231)