Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » C Anfänger Kritik

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
25.04.2018, 18:45 Uhr
Hans
Library Walker
(Operator)


Und worüber soll man da nachdenken?
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
26.04.2018, 09:42 Uhr
ao

(Operator)



Zitat von Jones:
... und so wenig wie möglich Abzweigungen zu bauen.

Warum versuchst du, so wenig wie möglich Abzweigungen zu bauen? Was ist schlecht an Abzweigungen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
26.04.2018, 16:06 Uhr
Jones



Weil der Dozent für Programmierung in meiner Umschulung (Fahinformatiker Systemintegration) es so Empfohlen hat. (Umschulung ist schon seit 1nehm Jahr abgeschlossen)
Dozent hat gesagt:

Achtet auf DRY!
Verändert keine Originaldaten/variablen, wer weis wann ihr sie noch mal braucht!
Versucht Abzweigungen zu vermeiden (Spagetticode gefahr)!

mfg
Jones
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
26.04.2018, 23:35 Uhr
Hans
Library Walker
(Operator)


Hi,

ich kannte DRY bisher noch nicht, aber nach dem zu schliessen, was Tante Wiki dazu sagt, kann ich ao nur zustimmen, dass sich DRY auf das Widerholungen von Codeblöcken bezieht.


Zitat:
Nur weil ich DRY und Abzweigungen in einem Satz unterbringe, heißt das nicht das es zusammengehört.

Nun ja, den Satz

Zitat:
Desweiteren versuche ich mich an DRY zu halten und so wenig wie möglich Abzweigungen zu bauen.

hab ich aber auch genauso verstanden, dass Du glaubst, dass DRY und Abzweigungen zusammen gehören, bzw. das DRY sich auch auf Abzweigungen bezieht.


Zitat:
Versucht Abzweigungen zu vermeiden (Spagetticode gefahr)!

Also da vermute ich aber ganz stark, dass sich das auf goto-Konstrukte bezieht. Also sowas:

C++:
// Label L1, L2, L3, L4, L5

// some code

L5:
  if (a<b) goto L1;
  else goto L2  

// ...
  for (n=0; n<N; n++)
    { for (m=0; m<M; m++)
      {
        // do something
        if (some_case)
        { flag=1;
          break;
        }
        // do something more
      } // for m
      if (flag) goto L3;
      // do something
    } // for n
  
L3:
  // do something more

  if (some_case)
     goto L4;
  
  // ...
  
L1:
  // ...
  goto L5;
  
L2:
  //...
  // more code



Das geht in richtung Spagetticode oder ist wahrscheinlich sogar schon welcher. Solche Abzweigungen sollte man wirklich vermeiden. Aber wenn man if-else-Konstrukte oder auch switch-case verwendet, sollten dabei keine so grossen Verständnisrobleme auftreten. - Sie sind schliesslich erfunden worden um solche goto-orgien zu vermeiden.
Nebenbei: Wenn man aus geschachtelten Schleifen aussteigen will, muss man das in C/C++ so machen, wie ich es in diesem Codebeispiel gemacht habe, wenn das Programm hinter der äusseren Schleife weiter laufen soll. Denn mit dem break in der inneren Schleife verlässt man nur diese.

Und Originaldaten sollte man natürlich immer sichern, bevor man damit arbeitet. Und wenn die Daten durch das Programm verändert werden, sollte man die Änderungen natürlich in eine Ergebnisdatei schreiben, die einen anderen Namen hat als jene, die die Originaldaten enthält.


Zitat:
Besonders bei "if" hab ich da noch keinen Style denn ich beforzuge.
Ich stehe da immer vor der Frage "if", ternary, dict(weis ich NOCH nicht wie das überhaupt in C geht).

Also ausser der Art und Weise, wie man bei if-Anweisungen Klammern setzt und zugehörige Codeblöcke formatiert, fällt mir nichts ein, was man da als besonderen Style betrachten könnte. Bezüglich Klammern setzten guckst Du hier.

Und was ist dict? - dictionary? - aber was soll das in diesem Zusammenhang sein?
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 26.04.2018 um 23:41 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
27.04.2018, 04:12 Uhr
Jones




Zitat:

Und was ist dict? - dictionary? - aber was soll das in diesem Zusammenhang sein?




Ja damit meine ich ein dictonary.

In der Umschulung haben wir Javascript benutzt und da wurden wir vom Dozenten angehalten,mehrere if's oder if's mit mehreren else, die keinen Effekte haben (geben nur Werte an Variablen) als dictonary zu erstellen.
Denn dabei handelt es sich um key value Paare.


Pseudocode:

Code:
das:
if x==a then y=100
if x==b then y=200
if x==c then y=300

wird zu:
var dict=[{a:100},{b:200},{c:300}]
y=dict.x

oder das:
if x==a then y=b
   else x==b then y=f
   else x==c then y=h

wird zu:
var dict=[{a:"b"},{b:"f"},{c:"h"}]
y=dict.x



Ob es diese Struktur auch in C gibt weis ich aber nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
27.04.2018, 09:38 Uhr
ao

(Operator)



Zitat von Jones:
Weil der Dozent für Programmierung in meiner Umschulung (Fahinformatiker Systemintegration) es so Empfohlen hat.

Dozent hat gesagt:
Versucht Abzweigungen zu vermeiden (Spagetticode gefahr)!

Und jetzt zerbrichst du dir den Kopf über deine Droprate-Zählung und versuchst krampfhaft, das "if" zu vermeiden? Was für ein "Spagetticode" soll denn dabei entstehen?

Hör auf, Regeln blind zu befolgen, und versuch lieber, ihren Sinn zu begreifen.

Spagetticode ist Code, der so verworren ist, dass du den Ablauf nicht mehr nachvollziehen kannst. Das kommt z.B. vor, wenn Bedingungen in mehreren Ebenen geschachtelt werden, dann sollte man aufpassen und mal über alternative Strukturen nachdenken. Es könnte zum Beispiel sein, dass die Funktion viel zuviel auf einmal macht und dass man besser einen Teil des Codes in eine neue Funktion auslagert.

Es kann aber genausogut sein, dass die Bedingungen nun mal so kompliziert sind, und dann kann man auch mal mutig sein und das einfach so runterprogrammieren mit drei geschachtelten ifs. Variablen und Funktionen klar und eindeutig benennen, keine Magic-Values hinschreiben, stattdessen auch Konstanten sprechende Namen geben, längere Bedingungsausdrücke auf mehrere Zeilen verteilen und die Reihenfolge (falls Zweifel bestehen könnten) mit Klammern klarstellen, und als Letztes auf konsistente Einrückungstiefe achten. All das verbessert die Übersichtlichkeit und erleichtert das Lesen und Gliedern. Und im Kommentar kurz und prägnant erklären, WAS da gemacht wird, nicht WIE es gemacht wird - das steht schließlich im Code.

Zum Thema dict: In C gibts das nicht. In C++ heißt es std::map.
Eine andere mögliche Alternative ist ein switch-case-Konstrukt, das aber nicht immer anwendbar ist (nur, wenn die case-Werte konstant und zur Compilezeit auswertbar sind).
Was immer geht, ist die if-elseif-else-Kette. Und die kann man beim besten Willen nicht als Spagetticode bezeichnen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
29.04.2018, 21:41 Uhr
Hans
Library Walker
(Operator)



Zitat von Jones:

ein dictonary.

Pseudocode:

Code:
das:
if x==a then y=100
if x==b then y=200
if x==c then y=300

wird zu:
var dict=[{a:100},{b:200},{c:300}]
y=dict.x

oder das:
if x==a then y=b
   else x==b then y=f
   else x==c then y=h

wird zu:
var dict=[{a:"b"},{b:"f"},{c:"h"}]
y=dict.x






Ah okay. Danke für die Aufklärung.
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: