Du bist nicht angemeldet.

Werbeanzeige

DasBlub

Alter Hase

Beiträge: 803

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

51

13.09.2011, 15:17

wir hatten letzthin solchen legacy-code gefunden (in der art):

Quellcode

1
2
3
4
5
if x then
  return a;
else
  return a;
end if;


M(

Legend

Alter Hase

Beiträge: 745

Beruf: Softwareentwickler

  • Private Nachricht senden

52

30.10.2011, 20:16

Letztens auf der Arbeit entdeckt, da war wohl ein Blinder am Werk (VB6):

Quellcode

1
2
3
4
5
if isShiftClick then
  set var = RGB(255, 0, 0) ' Türkis
else
  set var = RGB(64, 64, 64) ' Hellgrau
end if
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

babelfish

Alter Hase

Beiträge: 1 225

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

53

11.01.2012, 14:42

Kann mich wer erschiessen bitte? :|

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public bool CanSave(object commandParameter)
{
  if (Editor.lyrWork != null)
  {
    if (
       Editor.lyrWork.HasEdits == false ||
       Editor.lyrWork.IsReadOnly == true 
      )
      goto LabelError;

    goto LabelOK;
  }
  goto LabelError;

LabelOK:
  return true;
LabelError:
  return false;
}

Das Beste: Weiter unten gibts um die 10 Sprungmarken mit dem selben Namen.

[Edit] Eine Klasse mit ~5600 Zeilen Code in C# die grösstenteils auf goto's basiert.
Wieso haben sie nicht direkt Assembler gebraucht :cursing:

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »babelfish« (11.01.2012, 14:59)


xardias

Community-Fossil

Beiträge: 2 777

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

54

11.01.2012, 15:05

Haha, sehr gut :D

NachoMan

Community-Fossil

Beiträge: 3 909

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

55

11.01.2012, 15:12

Ist das eine Klasse einer allgemeinbildenen Schule? Wer hat die unterrichtet? xD
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

56

11.01.2012, 16:24

Was passiert bei goto eigentlich mit lokalen Variablen? Werden die vernichtet? Was ist, wenn man später wieder zurückspringen würde? Also eigentlich kann der Compiler das ja nicht entscheiden können, aber wieso baut man sowas dann in C# ein?
Lieber dumm fragen, als dumm bleiben!

Sacaldur

Community-Fossil

Beiträge: 2 332

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

57

11.01.2012, 16:44

hast du etwas gegen die dort verwendeten Gotos?
nur weil es eine bessere, leichter zu lesende Möglichkeit ohne Gotos mit 2 returns gibt (oder mit einem Return und den Vergleichen), heißt das doch nicht, dass die auch vom Programmierer als besser empfunden wird!
wo bleibt denn da das Nostalgie-Gefühl beim Programmieren?
aber ihr verwendet ja bestimmt alle schon diese neumodischen Leuchtmittel, die mit diesem komischen "Strom" betrieben werden...
wenn man da nur an die ganzen Erzeugungsanlagen denkt, da ist Gasbeleuchtung doch viel sicherer

[/Ironie]

aber lustig ist der Codeschnipsel schon ;)

(In Java ist goto ja ein reservierter Bezeichner, obwohl es dieses Schlüsselwort in Java nicht gibt...)

@Jonathan:
ich habe zwar C# in der Berufsschule gehabt, aber diese Frage kann ich nicht beantworten (da sieht man mal wieder, wie unvollständig der Unterricht war: wir hatten Gotos nie besprochen ;D)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Helmut

5x Contest-Sieger

Beiträge: 691

Wohnort: Bielefeld

  • Private Nachricht senden

58

11.01.2012, 19:06

Was passiert bei goto eigentlich mit lokalen Variablen? Werden die vernichtet? Was ist, wenn man später wieder zurückspringen würde? Also eigentlich kann der Compiler das ja nicht entscheiden können, aber wieso baut man sowas dann in C# ein?

In C# werden Variablen ja eh nicht richtig zerstört, da es keinen Destruktor gibt.
Allerdings ist es durchaus sinnvoll goto in eine Sprache einzubauen, weil es tatsächlich einige Situationen gibt, wo goto am Leserlichsten und Sinnvollsten ist.

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

59

11.01.2012, 19:41

Beispiel bitte.

MfG
Check
Das gibt Übersicht! Stay gold. | gnu.org | §\pi\approx\tfrac{7809723338470423412693394150101387872685594299}{2485912146995414187767820081837036927319426665}§ | Jabber: dasnacl@dasnacl.de (online?)

Tobiking

1x Rätselkönig

  • Private Nachricht senden

60

11.01.2012, 20:47

C# hat doch Destruktoren (siehe http://msdn.microsoft.com/de-de/library/…v=vs.80%29.aspx) und Objekte werden auch richtig zerstört. Nur übernimmt das der Garbage Collector, sobald dieser mitbekommt, dass ein Objekt nirgendwo mehr referenziert wird.

Lokale Variablen gibt es in C# und Java auch nicht direkt. Variablen halten Referenzen auf Objekte, die grundsätzlich auf dem Heap erzeugt werden. Die Referenz kann problemlos den aktuellen Scope verlassen und sorgt in dem Fall dafür das das Objekt weiterlebt, da der Garbage Collector erkennt, dass das Objekt weiterhin referenziert wird. Die VM hat lediglich die Möglichkeit zu erkennen das eine Referenz den Scope nicht verlässt und entsprechend zu optimieren, sich z.B. das Erzeugen auf dem Heap ersparen. Das wird aber sicherlich nicht passieren solange eine Funktion, sei es mit oder ohne goto, einen Programmzweig hat, bei dem die Referenz zurückgegeben werden könnte.

Und ein Beispiel für eine berechtigte Nutzung von goto ist Ausnahmebehandlung in C. Man stelle sich eine lange Funktion vor, in der an vielen Stellen eine Ausnahme auftreten könnte. Da kann ein einfaches goto Error ordentlicher sein als der Versuch von jeder Stelle an der ein Fehler auftreten kann irgendwie wieder rauszukommen.

Werbeanzeige