Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Elegant programmieren...was ist Elegant?
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Helli M.



Anmeldungsdatum: 20.12.2004
Beiträge: 29
Wohnort: Burgenland in Österreich

BeitragVerfasst am: 10.01.2005, 16:39    Titel: Elegant programmieren...was ist Elegant? Antworten mit Zitat

Hallo an Euch!!

Ich hab in einigen Tutorials gelesen, dass ein bestimmter Befehl zwar möglich ist, aber das ist nicht elegant...
Was ist "elegant programmieren"??
Ist es nicht das Ziel, dass es klappt, und nicht, wieso es klappt??
Ich meine, zb. Ich spiele mich noch immer mit einfachen Übungen herum, und dabei wollte ich alle Möglichkeiten in Betracht ziehen, was soll passieren, wenn ich frage "Wie gehts dir, (g) oder (s)chlecht?"
und man gibt außer g,G,s,S einen anderen Buchstaben ein, ist es dann "unelegant", wenn ich mit case select arbeite??
Wenn ja, warum eigentlich??
Nach welchen Kriterien entscheidet sich, ob ein Code "elegant" ist??
(Ich hab vielleicht Probleme....! lachen )
Bitte, wei(c)ht mich ein, in dieses Geheimnis!!!
Elegante Grüße zwinkern
sendet Euch
Helli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 10.01.2005, 16:44    Titel: Antworten mit Zitat

moin

unelegant find ich den GOTO befehl.

was hast du denn an SELECT CASE auszusetzen?? geschockt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Helli M.



Anmeldungsdatum: 20.12.2004
Beiträge: 29
Wohnort: Burgenland in Österreich

BeitragVerfasst am: 10.01.2005, 16:48    Titel: Antworten mit Zitat

Hi Jan!!!

Wieso findest Du den GOTO unelegant??
Das ist es ja was ich begreifen möchte??

Und an select case hab ich überhaupt nix auszusetzen, eigentlich hab ich an keinem einzigen Befehl was auszusetzen... höchstens es geht nicht so wie ich will!!! zwinkern

Tschüssi
Helli
_________________
Wieso einfach, wenn's auch kompliziert geht?!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 10.01.2005, 16:50    Titel: Antworten mit Zitat

Hi.

Mal ein kleines Beispiel:

Anstatt
Code:
FOR a = 1 to 24
  PRINT a; ". Zeile"
NEXT a


könnte man auch
Code:
a = 1
1 PRINT a; ". Zeile"
a = a + 1
IF a < 24 THEN 1


schreiben.

Also ich denke, elegant bedeutet, das Problem mit möglichst geringem Aufwand für Mensch und Maschine zu lösen.

Was CASE SELECT angeht:
Code:
CASE SELECT UCASE$(INKEY$)
CASE "G"
  PRINT "Es geht dir also gut."
CASE "S"
  PRINT "Oh, es geht dir schlecht? :-("
CASE ELSE
  PRINT "Falsche Taste gedrückt."
END SELECT

Code:
IF UCASE$(INKEY$) = "G" THEN
  PRINT "Es geht dir also gut."
ELSE IF UCASE$(INKEY$) = "S" THEN
  PRINT "Oh, es geht dir schlecht? :-("
ELSE
  PRINT "Falsche Taste gedrückt."
END IF


Nach meiner Einschätzung wäre also IF eleganter (einfach vom Schreibaufwand her), aber jemand, der sich mit soclhen Sachen mehr beschäftigt, wird evtl. andere Gründe dafür anführen.

(Codes ungetestet. Alle angaben ohne Gewähr.)
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 10.01.2005, 17:35    Titel: Stil Antworten mit Zitat

Hallo.

Hierbei muss man seinen eigenen Programmierstil finden. Die Entscheidung, ob man IF oder lieber SELECT CASE benutzen sollte, ist oft eindeutig, aber manchmal kann man in einer "Grauzone" wählen.
Mit etwas Programmiererfahrung entwickelt man automatisch seinen eigenen Programmierstil. Dazu gehören auch Einrückungen usw.
In dem obigen Fall finde ich SELECT CASE "hübscher", aber das ist Ansichtssache.

Zum GOTO. GOTO ist in eigentlich allen Sprachen (ausgenommen Batch peinlich) verpönt. Seine Benutzung bringt oft scheußlichen Spaghetti-Code zustande, durch den niemand mehr wirklich durchsteigt. Dadurch wird auch für den Programmierer selbst das Fehlersuchen und das Erweitern/Ändern des Codes schwieriger.
GOTO lässt sich eigentlich immer vermeiden. Allein schon die Regel auf GOTO zu verzichten, bringt schon ein ganzes Stück "Eleganz" in deine Programme. zwinkern

Ein "elegantes" Programm ist gut strukturiert und der Quelltext lässt sich mit möglichst wenig Anstrengung überblicken und verstehen.

Einrückungen und Absätze sind ein absolutes Muss. Gremlin hat das mit den Einrückungen (ausgenommen beim Zeilennummernbeispiel) sehr gut gemacht. lächeln

Großes Kopfzerbrechen muss man sich über dieses Thema aber nicht bescheren. Man findet auf kurz oder lang meistens selbst heraus, wie man am schönsten/elegantesten programmiert. zwinkern

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 10.01.2005, 17:47    Titel: Antworten mit Zitat

Ihr mit euren Einrückungen Kopf schütteln peinlich

Absätze müssen natürlich sein, das geht garnicht anders

Aber Einrückungen empfinde ich als sehr lästig, kommentare mit REM sowieso.
Das einziege was ich mir mal angewöhnt hab, ist allerhöchstens 1 Leefzeichen bei Schleifeninhalten, aber mehr auch nicht durchgeknallt

Ich komm trotzdem gut mit meinem Code klar
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 10.01.2005, 17:54    Titel: Antworten mit Zitat

Wenn ich ein Programm schreibe, dann vergess ich für gewöhnlich auch alle Richtlinien (<> Regeln).

Aber ich gehe den Code danach normalerweise auch nochmal durch und trenn dann alles ein wenig und rücke nachträglich ein.
(Grobe Struktur habe ich schon beim Schreiben)

Aber ich denke, wenn, dann grade bei solchen Beispielen, die für andere, z.T. unerfahrene Programmierer (die Antwort ist ja nicht nur für Helli) gedacht sind, sollte man schon Einrücken.
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 10.01.2005, 18:15    Titel: Antworten mit Zitat

Hallo.

Einrückungen sind sehr wichtig und bei längeren Codes absolut unumgänglich, damit je wieder jemand den Code vernünftig lesen kann bzw. du selbst nach 2 Wochen noch durchsteigst. zwinkern

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 10.01.2005, 18:16    Titel: Antworten mit Zitat

Mensch, mensch, mensch.

Ihr habt Probleme zwinkern grinsen tztztz
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 11.01.2005, 00:38    Titel: Antworten mit Zitat

Hi...

also ich stimme Sebastian voll zu. Jedoch muß ich sagen das ich auch meine ersten Programme (auch größere wie z.B. JUMPER) noch mit GOTO und wenig Übersicht gemacht habe.

Es hat Jahre gebraucht einen "Stil" heraus zu arbeiten der vor allem eins ermöglicht...den Code auch noch in 5 Jahren zu verstehen.

Wichtigste Regeln hierbei (für mich): Einrücken um Strukturen in Schleifen und Abschnitte zu bekommen und zum Anderen REM Zeilen die beschreiben was welcher Abschnitt genau macht.

REM Zeilen tun niemanden weh - aber in 5 Jahren bis du umso dankbarer damals einen Vermerk gemacht zu haben wenn du nach einem kleinen, fiesen und meist lästigen Bug suchst. Ganz zu schweigen davon das viele Codes ja Freeware sind und auch andere ihn "lesen" können sollen.

Trotzdem denke ich das früher oder später - meist proportional mit dem Umfang des Projektes und der KB an Quellcode - diese Einsicht und Gewohnheit (Routine) von alleine kommt.
_________________
Man kann sich öfter als zweimal im Leben halb tot lachen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 11.01.2005, 16:19    Titel: Antworten mit Zitat

Hallo.

Genau.

Mit dem Kommentar zu REM-Zeilen meinte er glaube ich auch nur, dass das Apostroph irgendwie hübscher ist als REM. zwinkern

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 11.01.2005, 20:01    Titel: Antworten mit Zitat

Huhu,

Auf alle Fälle ist es praktischer, weil man z.B. keinen Doppelpunkt davor setzen muss, wie es bei REM der Fall ist.

Lustig: Ich hatte mal nen Fehler entdeckt: und zwar:

wenn man schrieb
Code:
IF a = 1 THEN REM nichts
wird (ich weiß nicht mehr bei welcher Version) im interpretierten Modus einfach nichts gemacht, wenn die a=1 zutrifft.
Wenn man aber später die EXE damit konfrontierte, wurde es auf einmal gehandhabt, wie ein offenes
Code:
IF A=1 THEN
..code..
END IF
wobei natürlich das EndIf Fehlte, weils die IDE ja nicht zulässt, da "fehl am Platz" grinsen

Naja lächeln

Grüßle und viel Spaß beim Kommentieren eurer Programme,
Mecki zwinkern

PS: Ich hab gute 4 Jahre mit QB gearbeitet ohne Internet - und auch ohne dass es mir jemand gesagt hat, bin ich aufs Einrücken und Kommentieren gekommen. Ich denke, man lernt das einfach mit der Zeit von selbst lächeln
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 11.01.2005, 21:17    Titel: Antworten mit Zitat

Eine Software sollte auch immer die Kriterien der Wartbarkeit erfüllen, daher ist Software-Design ebenso wichtig wie eine funktionierende Implementation.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
helium



Anmeldungsdatum: 10.09.2004
Beiträge: 397
Wohnort: Leverkusen

BeitragVerfasst am: 13.01.2005, 13:16    Titel: Antworten mit Zitat

Zitat:

Ich hab in einigen Tutorials gelesen, dass ein bestimmter Befehl zwar möglich ist, aber das ist nicht elegant...
Was ist "elegant programmieren"??

Einzelne Befehle sind selten elegant oder nicht. Elegant sind eigentlich immer nur Lösungsansätze zu einem Problem. Eine solche Lösung ist dann elegant, wenn sie einfach zu verstehen aber dennoch performant und vor allem leicht wartbar ist.


Zitat:

Ist es nicht das Ziel, dass es klappt, und nicht, wieso es klappt??

Nein. Das es klappt ist grundvoraussetzung. Darüber diskutiert man gar nicht.
"Hey Chef, ich hab hier 'ne Lösung. Das dumme ist nur, das sie nicht funktioniert."
Ich würd's lieber nicht versuchen.

Zitat:

Ich meine, zb. Ich spiele mich noch immer mit einfachen Übungen herum,

Klar. Ganz am Anfag ist es erstmal wichtig überhaupt etwas lauffäiges hinzubekommen, nahc dem Motto: Hauptsache es läuft. Später werden andere kritierien aber immer wichtiger. Wenn du dann auf einmal nicht mehr 1000 sondern 100000 Zeilen Code hast und alles irgendwie so hingeklatscht ist, das es gerade so läuft und dann hat sich doch mal ein Fehler eingeschlichen, oder es soll was geändert werden oder, oder, oder, dann gute Nacht.


Zitat:

und dabei wollte ich alle Möglichkeiten in Betracht ziehen, was soll passieren, wenn ich frage "Wie gehts dir, (g) oder (s)chlecht?"
und man gibt außer g,G,s,S einen anderen Buchstaben ein, ist es dann "unelegant", wenn ich mit case select arbeite??
Wenn ja, warum eigentlich??

Wenn die Lösung mit Select Case sehr unübersichtlich ist und eine andere deutlich einfacherere Lösung existiert, dann ist die Lösung mit Select Case unelegant. Das liegt aber nicht an Select Case an sich, sondern daran, das es genau in dieser Situation unpassend ist.


Zitat:

Mit etwas Programmiererfahrung entwickelt man automatisch seinen eigenen Programmierstil. Dazu gehören auch Einrückungen usw.

Nein. Einrücken ist kein Teil des Stils, sondern Grundlage. Wenn du lange ein Instrument spielst, entwickelt sich auch (hoffentlich) dein eigener Stil. Das du aber über haupt die Töne triffst, wird niemand als Teil deines Stils ansehen.



Zitat:
Aber Einrückungen empfinde ich als sehr lästig, kommentare mit REM sowieso.
Das einziege was ich mir mal angewöhnt hab, ist allerhöchstens 1 Leefzeichen bei Schleifeninhalten, aber mehr auch nicht

Programmierer empfinden Einrückungen laut Studie am angenehmsten, wenn es zwischen zwei und vier Leerzeichen sind. Du kannst einfach die Tabbreite im Editor einstellen und dann Tab statt Space drücken. Dann ist es genau so viel Tipparbeit, falls dich das stören sollte. Aber ein wenig mehr Tippen ist eigentlich kein Argument.
Statt REM kann man Hochkommata verwenden.


Zitat:
Ich komm trotzdem gut mit meinem Code klar

Darf man fragen, wie groß deine Projekte in etwa sind?

Ich habe auch gerade ein noch kleines Projekt am laufen (bestehend aus 41 Modulen und 49 Headern) in verhältnismäßig wenig Kommentare zu finden sind.
IMHO zeichnet sich guter Code dadurch aus, das er mit möglichst wenig Kommentaren auskommt, da bereits aus dem Code leicht ersichtlich ist, was vorgeht. Das heißt natürlich nicht, dass man auf Kommentare verzichten sollte, wenn sie nötig sind.

Zitat:
Mensch, mensch, mensch.

Ihr habt Probleme

Ja, klar, Diskussionen über einrückungen erscheinem lächerlich, wenn man schon was länger arbeitet, aber für Anfänger ist das tatsächlich ein Thema.
_________________
Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 13.01.2005, 15:48    Titel: Antworten mit Zitat

Zitat:
Ich komm trotzdem gut mit meinem Code klar


Z.B. mein MARSBASE Game für QB-City hat 57kB Code. Und ich komme gut damit klar.

Hab auch größere Projekte, z.B. einen BASIC zu Assembler Konverter. Wird vorraussichtlich ca. 70kB bekommen. Und auch nach den Ferien bin ich noch durchgestiegen, obwohl ich nur 2 Kommentare (Platzhalten) im gesamten Code hatte. Meine Programme sind eigentlich alle nach dem gleichen Schema aufgebaut:
- DECLARE Anweisungen
- DIM (SHARED)...
- Header mit Einstellungsvariablen
- Menü oder Hauptprogramm
- Unterfunktionen mit GOSUB & RETURN

Ich hab mir über die Zeit eine ziemlich große Ansammlung von SUB's geschrieben, die in fast jedem Projekt zum Einsatz kommen.

Hatte noch nie Probleme, mich in meine eigenen Codes hinzuversetzen.
Natürlich sollen auch andere den Code verstehen können, aber da bin ich halt egoistisch und sorge dafür, dass wenigstens ich durchsteige durchgeknallt
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 13.01.2005, 17:16    Titel: Antworten mit Zitat

wichtig ist auch, dass du deinen variablen schön aussagekräftige namen gibst.
Dann was man immer, welche variable gerade was speichert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 13.01.2005, 17:20    Titel: Antworten mit Zitat

Für Eleganz gibt es bei mir eigentlich zwei Definitionen, die je nach Aufgabe gültig sind.
Wenn einfach nur darum geht, ein Programm zu schreiben, dass für den User nützlich sein soll, muss der Code seine Aufgabe SCHNELL und mit MÖGLICHST WENIGEN ZEILEN bearbeitet.
(Das erste ist meistens die Folge des zweiten).
Übersichtlichkeit ist in erster Linie einmal Nebensache.
Beispiele:
statt
IF a <> 0 THEN
PRINT "Wert wird geprüft..."
CALL TESTWERT
END IF

ist es in dieser Bedeutung eleganter, zu schreiben

IF a THEN PRINT "Wert wird gerprüft": TESTWERT

Der Unterschied zwischen den Beiden Codes liegt einfmal darin, dass a nicht mehr mit 0 verglichen wird, dass die CALL-Anweisung wegfällt, und dass der IF-Block in eine einzige Anweisung gepackt wurde.
Auf diese Art lässt sich auch der Quellcode kleiner halten. Sicher, hier spart man nur (*nachzähl*) 21 Bytes, aber sobald das Programm einmal größer wird, (sobald es sich eben rentiert, so zu optimieren) macht das doch etwas aus. Etwa 48 auf diese Weise vereinfachte IF-Blöcke machen dann ein KB aus. Auf diese Zahl kommt man ziemlich schnell, denke ich. (Gut, öfter wird wohl SELECT-CASE drankommen...)
Ob sich das dann auch auf das compilerten Prog auswirkt, habe ich noch nicht ausprobiert, aber so weit ich mich in ASSEMBLER auskenne, dürfte zumindest ein kleiner Effekt spürbar sein.

Elegant kann aber auch sein, dass das Programm besonders leicht nachzuvollziehen ist.
Das kann dann schon bedeuten, dass man genau das Gegenteil macht, von dem, was ich oben beschrieben habe.
Über Einrückungen in Schleifen lässt sich streiten, ich jedenfalls komme besser mit ihnen klar, vor allem weil ich oft so viele Schleifen ineinander Schachtele, dass ich Kopfweh vom nachvollziehen bekomme.... (vielleicht sollte ich das auch Eleganter lösen?)
Das selbe gilt für Absätze.


Wie lässt es sich jetzt also anstellen, dass man ein Prog in beiden hinsichten Elegant ist?
Gar nicht.
Die einzige Möglichkeit ist, zwei Versionen zu schreiben, bzw sein Prog nach der Entwicklungsphase (vor dem Compilern) umzuschreiben.

Tja, so sehe ich das auf jeden fall.
Post what you think cool

Have a nice Day - Ciao!
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

BeitragVerfasst am: 13.01.2005, 23:43    Titel: Antworten mit Zitat

Warum man elegant programmieren können sollte? Kann ich Dir sagen. Stell dir mal vor Du stehst vor dem Personalchef und er fragt Dich:
"Es gibt doch so viele Programmierer. Warum sollten wir gerade sie einstellen?"
Jetzt könnte man antworten: "Na ich schustere irgendwie meine Programme zusammen und zum Schluß laufen sie. Aber fragen sie dann bloß nicht wie."

Oder die Antwort könnte lauten (ohne dabei zu ausschweifend zu werden):
"Ich arbeite nach den heutzutage anerkannten und ausgereiften Regeln der Softwareentwicklung. Ich habe mir angewöhnt den den Aufwand in meine Programme zu investieren, daß sie übersichtlich und gut strukturiert sind. Damit spart man viel Zeit, wenn Fehler gesucht werden müssen oder das Programm später erweitert oder verändert werden soll. Außerdem ist diese Art der Programmierung sehr nützlich wenn man ein Programm in Teamarbeit entwerfen muß."

Ich habe schon gehört, das es Programmierer gibt, die mit der Ausrede ihr Programm wäre zu langsam, wenn sie ordentlich programmieren. Meinentwegen, dann ist das bei denen halt so. Deren Programm fallen dann unter die Rubrick: Kann nicht mehr erweitert werden weil keiner mehr sich in dem Programm zurecht findet. Ich hoffe nur, das ich nicht der Depp bin, der genau das dann versuchen soll.
Andererseits habe ich gehört das im Linux-Quellcode haufenweise goto-Befehle gibt aus genau diesem Grund.

Ich habe jedenfalls keine Probleme das meine Programm zu langsam wären, weil ich sauber programmiere. Das Einrücken ist nun wirklich kein großer aufwand. Das hat man sich sehr schnell angewöhnt. So ist es mit den meißten Dingen beim eleganten Programmieren.

Na gut hier mal alles was mir so einfällt zum Thema elegantes Programmieren, was ich mir so mit der Zeit angewöhnt habe und bestimmt nicht so schnell abgewöhnen werde:
Füher als ich es noch nicht besser wußte bin ich mit goto immer kreuz und quer durch meine Programme gehüpft, bis ich in meinen eigenen Programmen mich nicht mehr auskannte. Mitlerweile habe ich diesen Befehl schon seit Jahren nicht mehr verwendet und ich finde es sehr löblich, das in moderen Programmiersprachen wie Jave dieser Befehl nicht mehr gibt.

Dann solle man die Einzelnen Arbeitsschritte in Funktionen und Subs auslagern, anstatt ein riesiges unübersichtliches Programmmonstrum zu erschaffen. Gerade das nicht verwenden von Unterprogrammen ist eine der Heufigsten Schwächen vieler Programmierer finde ich. Erst vorhin hatte ich ein Aufgabe und habe mir gesagt, das hast du doch schon mal gelößt. Ich mußte nur die Funktion rüber kopieren und einen Funktionsaufruf in mein Programm einfügen. Vieleicht hatte ich damals ein wenig mehr aufwand, denn habe ich jetzt aber garantiert eingespart.

Das war eigentlich schon das wichtigste. Kommentare können auch nicht schaden und sind manchmal unerläßlich. Zum Beispeil explodierte vor ein paar Jahren eine Ariane 5 Rakete kurz nach dem Start. Der Grund war ein Softwarefehler. Es wurde eine Funtion einer Ariane 4 Rakete übernommen, die als Parameter den Treibstoff in Gallonen benötigte. Nun wurden aber amerekanisch mit britischen Gallonen verwechselt und die Funktion berechnete das falsche. Hätte man nur dazu schreiben müssen.

Da es hier angesprochen wurde will ich auch zu Select-Case was sagen. Ich habe gehört, daß es Leute gibt, die Select-Case nicht mögen. Das ist deren Problem. Was ich aber unverantworlich halte, ist das sie versuchen Select-Case als schlecht darzustellen. Es ist ein sehr gutes Werkzeug um den Code übersichtlicher zu machen und ich verwende es immer wieder.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
helium



Anmeldungsdatum: 10.09.2004
Beiträge: 397
Wohnort: Leverkusen

BeitragVerfasst am: 14.01.2005, 15:01    Titel: Antworten mit Zitat

Zitat:
Wenn einfach nur darum geht, ein Programm zu schreiben, dass für den User nützlich sein soll, muss der Code seine Aufgabe SCHNELL und mit MÖGLICHST WENIGEN ZEILEN bearbeitet.

Möglichst schnell? Das heitß ich darf dann 10000000 Anschläge pro Minute haben, statt nur 1000000? Ich komme ja nichtmals auf 1000.
Guck dir mal die 90-10 Regel an.
Es gibt Dinge, die veil Zeit verbrauchen, die aber schnell sein sollten. Genau die musst du optimieren. Was viel Zeit verbraucht solltest du aber nicht erschätzen, sondern messen. Professionell würde man Profiler einsetzen. Für QB gibts sowas aber AFAIK nicht.


Zitat:
Übersichtlichkeit ist in erster Linie einmal Nebensache.
Beispiele:
statt
IF a <> 0 THEN
PRINT "Wert wird geprüft..."
CALL TESTWERT
END IF

ist es in dieser Bedeutung eleganter, zu schreiben

IF a THEN PRINT "Wert wird gerprüft": TESTWERT

Der Unterschied zwischen den Beiden Codes liegt einfmal darin, dass a nicht mehr mit 0 verglichen wird, dass die CALL-Anweisung wegfällt, und dass der IF-Block in eine einzige Anweisung gepackt wurde.


CALL halte ich auch für redundant. Das der QB-Interpret so dämlich ist und das <> 0 nicht selbst wegoptimiert ist natürlich scheiße, weil sich durch soetwas dann viele Anfänger einen beschissenen Stil anlegen. Bei normalen Sprachen würde es keinen unterschied machen.

Zitat:
Auf diese Art lässt sich auch der Quellcode kleiner halten. Sicher, hier spart man nur (*nachzähl*) 21 Bytes, aber sobald das Programm einmal größer wird, (sobald es sich eben rentiert, so zu optimieren) macht das doch etwas aus. Etwa 48 auf diese Weise vereinfachte IF-Blöcke machen dann ein KB aus. Auf diese Zahl kommt man ziemlich schnell, denke ich. (Gut, öfter wird wohl SELECT-CASE drankommen...)

Wow. Meine Platte ist 160GB groß. Da ist es natürlich toll, wenn mein Programm 1KB kleiner ist.




Zitat:
Ob sich das dann auch auf das compilerten Prog auswirkt, habe ich noch nicht ausprobiert, aber so weit ich mich in ASSEMBLER auskenne, dürfte zumindest ein kleiner Effekt spürbar sein.

Wie gesagt. Das ist ein QB-Problem. Heutige Compiler machen so Dinge wie Loop-Unroling und Function inline Expansion. Dadurch wird der Code deutlich größer und dennoch viel schneller.


Zitat:
Elegant kann aber auch sein, dass das Programm besonders leicht nachzuvollziehen ist.
Das kann dann schon bedeuten, dass man genau das Gegenteil macht, von dem, was ich oben beschrieben habe.

Genau das ist elegant. Immer an den Klassiker denken: Vorzeitiges Optimieren ist die Wurzel allen Bösen.

Zitat:
Wie lässt es sich jetzt also anstellen, dass man ein Prog in beiden hinsichten Elegant ist?
Gar nicht.

Natürlih. das ist absolut gar kein Problem. Heutige Compiler (bzw. deren Optimierer) kommen mit ordentlichem Code meistens deutlich besser klar, als mit irgendwelchem rumgetrickse.

Zitat:
Die einzige Möglichkeit ist, zwei Versionen zu schreiben, bzw sein Prog nach der Entwicklungsphase (vor dem Compilern) umzuschreiben.

Tja, so sehe ich das auf jeden fall.

Was lernen wir daraus: QB ist ungeeignet für Anfänger.
Scheinbar sollten Anfänger mit modernen hochoptimierenden Compilern anfangen und erst wenn sie einen halbwegs ordentlichen Stil haben umsteigen auf bequemere Sprachen.
_________________
Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

BeitragVerfasst am: 14.01.2005, 16:33    Titel: Antworten mit Zitat

helium hat Folgendes geschrieben:
Was lernen wir daraus: QB ist ungeeignet für Anfänger.
Scheinbar sollten Anfänger mit modernen hochoptimierenden Compilern anfangen und erst wenn sie einen halbwegs ordentlichen Stil haben umsteigen auf bequemere Sprachen.

Deine Schlußfolgerung kann ich nicht ganz nachvollziehen. Alles was leider so viele QB-Programmierer an unsauberem Code machen kann man genau so mit anderen Programmiersprache machen. Was ich da an c++ Programme schon gesehen habe, das ist kein bischen besser als bei Qbasic.

Sauberes Programmieren kann man nicht durch andere Programiersprachen erreichen man muß es immer noch selber machen. Qbasic ist halt schön weil dort viele Fehler garnicht möglich sind.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz