Softwareschrott: case-sensitive

with tags Quählkot Softwareschrott Technik -

Es gibt so ein paar Fehler, die scheinbar jeder Entwickler wiederholen muss, damit meine ich allerdings weniger Dinge wie ein vergessenes Semikolon oder eine Speicher der nicht freigegeben wird, sondern eher Fehler die derjenige wahrscheinlich nichtmal als Fehler wahrnehmen würde, wenn man ihn darauf hinweisen würde.

Zu den kleineren dieser Fehler zählt wohl die Unterscheidung von Groß- und Kleinschreibung, eine blödsinnige Marotte die aus dem C-Umfeld kommt und die irgendwie jeder übernommen hat der irgendwelche größeren Softwareprojekte in den letzten 10-20 Jahren gestartet hat.

Ich mein damit keinesfalls dass in Suchfeldern jetzt kein Häkchen für "Großschreibung beachten" mehr vorhanden sein darf, sondern vielmehr dass es Blödsinnig ist von anderen zu erwarten sie sollen sich gefälligst erinnern ob sie "bild.jpg" oder "Bild.JPG" als Dateinamen gewählt hatten. Auch bei Programmierumgebungen und -Sprachen wir dieser Blödsinn weiterhin durchgezogen, fast so als würden 26^(maximale Länge eines Variablennamen) Kombinationen (36 wenn Zahlen erlaubt sind) nicht ausreichen.

Für die Rechenfaulen: bei 8 Zeichen länge für den Variablennamen, wären das schonmal 208.827.064.576 Kombinationsmöglichkeiten. Gehen wir davon aus dass wir auch mal Variablen mit >20 Zeichen haben, auch meistens Zahlen erlaubt sind, dafür aber nur aussprechbare Kombinationen wollen, so können wir mit ziemlicher Sicherheit weiterhin eins annehmen: Es sind genug Kombinationen möglich! Wir brauchen keine Case-Unterscheidung!

Das bedeutet ja keinesfalls dass man als Entwickler später keine Großschreibung verwenden DARF. Wer wirklich der Meinung ist dass seine Konstanten unbedingt GROSS_GESCHRIEBEN_WERDEN, der kann das gerne tun, von mir aus kann der Editor dann auch gerne jedes Vorkommen automagisch durch die vorgezogene Variante ersetzen. Gerne darf auch der Compiler/Interpreter/Whatever vor dem Verarbeiten des Quellcodes einfach alles in Kleinschreibung umwandeln. Was jedoch nicht erfordert werden sollte, ist dass ich als Nutzer anfangen soll mir die Schreibweisen zu merken.
Schlimmer noch, manche Nutzer fangen irgendwann an Sachen danach selbst zu unterscheiden, da kommt Zeugs raus wie object = Object(OBJECT), was 3 verschiedene Referenzen enthällt, die aber alle den gleichen Wortlaut als Name haben.

Programmiersprachen, Editoren und Shells sind Werkzeuge um die Interaktion mit dem Computer einfacher zu machen, die sollten so viel wie möglich Arbeit abnehmen damit sich der Benutzer auf die wichtigen Dinge konzentrieren kann. Auch die blödsinnige Behauptung dass das aus Performance-Gründen gemacht wird, ist mehr als lächerlich, ein Compiler ist eh nicht zeitkritisch, eine IDE parst heutzutage permanent den geschriebenen Code und selbst ein Interpreter macht so viele Dinge nebenbei, dass auch dort ein einfacher lower_case(string)-Aufruf überhaupt nicht ins Gewicht fallen würde.

Nein, das alles wird aus genau einem Grund gemacht: es wäre anstrengender gewesen diesen zusätzlichen Befehl/Parameter zu tippen und die Unterscheidung mitzunehmen war schon der Defaultwert in der Umgebung/Sprache mit der der Entwickler der aktuellen Idiotie gearbeitet hat.
Natürlich hätte man das verdammt leicht ändern können, z.B. hätte nur ein Entwickler mal zwischendrin seine String-Suchfunktion/Vergleichsfunktion per Voreinstellung Großschreibung ignorieren lassen müssen. Aber schon das scheint viel zu viel Aufwand zu sein, außerdem hat sich der vorhergehende bestimmt etwas dabei gedacht als er das unterlassen hat...

getreu dem Motto: Warum selber denken?

Importierte/Alte Kommentare:

#1387: 14.Jun.2010 09:06 von Dr. Azrael Tod

Den größten Spaß haben wir gerade im IRC festgestellt:

21:17 ich mein nur... das zieht sich halt durch
21:18 wordpress-urls sind case-sensitiv
21:18 unix-filesysteme auch
21:18 php nicht
21:18 php nich? o0
21:18 sicher?
21:18 sicher
21:19 grübel da arbeite ich nu permanent damit...
21:19 then again... codingstandard unso
21:19 ich habs glaube nie ausprobiert
21:19 % php -r 'echo PRINt_r();'
21:19 PHP Warning: print_r() expects at least 1 parameter, 0 given in Command line code on line 1
21:20 hmm.. hab eh gerade keinen rechner mit php hier
21:20 das muss man im hinterkopf behalten, wenn man grep verwendet, um zu sehen ob eine bestimmte methode im projekt verwendet wird
21:21 $foo = 'bar'; echo $FOO;
21:22 ausgabe: ''

und das alles weil...:

PHP variable names are case sensitive, but the names of functions are case insensitive. Why is this?

PHP is a language that's designed to let you write a web page template into which you can insert additional tags to call up the functionality of PHP, and it originated in the days before xhtml when tags were case insensitive. So it's natural for those additional tags to be case insensitive too.

However, following on from other Open Source / Linux / Unix projects, for the most part PHP is case sensitive - a sensible approach as it avoids the loss by folding of 26 ASCII characters in your coding scheme. Also a sensible approach as those of us who use PHP and Perl and Python and other languages appreciate a certain amount of consistency.

#1388: 15.Jun.2010 02:06 von fwolf

Ich bau bei meinen Dateisystem-Abfragen IMMER ein strtolower ein. Eine JPEG-Datei bleibt schließlich auch eine solche, wenn die Dateiendung GROß geschrieben wird.

Und was Variablen anbelangt: Ich benutze ausgiebig die ungarische Notation - ausgenommen bei übergebenen Variablen, deren Inhalt, d.h. Typ im Moment der Übergabe unklar ist (wird dann halt ausgeparst), sowie prinzipiell nicht bei return-Werten (ist IMMER $return). Auf Konstante greife ich dank OOP immer seltener zurück, ich nutze sie hauptsächlich in Template-Systemen, wie etwa von WP oder meinem eigenen kleinen Noname-Template-Engine, der sich stark an dem (rawphpengine) von Habari orientiert.

cu, w0lf.

#1389: 15.Jun.2010 12:06 von profmakx

Immer ein strtolower einzubauen ist natürlich totaler bullshit weil man dadurch eine schöne fehlerquelle einbaut. Aber darum gehts ja hier.

  • #1390: 15.Jun.2010 05:06 von Dr. Azrael Tod

    ich denke mal, er meinte schon beides zu behandeln oder so...
    sprich: if (strtolower($eingabe) == strtolower($dateiname)): ...

    • #1391: 15.Jun.2010 05:06 von profmakx

      das ändert nichts daran, dass du die dateinamenskonvention deines fs mit füssen trittst. eine datei bild.JPG kann durchaaus neben einer datei bild.jpg bestehen und das sind ZWEI VERSCHIEDENE DATEIEN. Da kannst du nicht "oh ich lösche mal alles was irgendwie wie bild.jpg aussieht" machen.

Geschrieben von Dr. Azrael Tod