# SCL Anfängerfragen



## Gerri (2 Oktober 2009)

Hallo, 
es gibt zwei Dinge, die mich im AUgenblick in SCL quälen:

1. GOTO - Anweisung. 
    Was gibt es dabei zu beacjten? Irgendwie kommt es mir vor als wäre 
    das Verhalten anderst als in AWL.

2. Return - Anweisung
    Wirkt diese wie BEA oder BEB? In einer if-Then Anweisung z.b.

    IF X = True THEN 
       Return;
    END_IF;

    ...
    ...
    RETURN;

3. In CPU laden. Richt es im SCL editor zu laden oder muss man im Simatic 
    Manager ebenfalls laden?


----------



## zotos (2 Oktober 2009)

Gerri schrieb:


> Hallo,
> es gibt zwei Dinge, die mich im AUgenblick in SCL quälen:
> 
> 1. GOTO - Anweisung.
> ...


Einfach nicht benutzen! GOTO ist Schrott!!! 
Nutze lieber Strukturierende Elemente wie IF-THEN-ELSE-ELSIF/CASE/FOR/WHILE/usw.



Gerri schrieb:


> 2. Return - Anweisung
> Wirkt diese wie BEA oder BEB?


Ja (ich benutze diese Anweisung allerdings eher selten)



Gerri schrieb:


> 3. In CPU laden. Richt es im SCL editor zu laden oder muss man im Simatic
> Manager ebenfalls laden?


[/QUOTE]
Es reicht im SCL-Editor.


----------



## Gerri (2 Oktober 2009)

meinst du goto funktioniert nicht immer oder es ist einfach unschön damit zu arbeiten?


----------



## Mobi (2 Oktober 2009)

unprofessionell


----------



## zotos (2 Oktober 2009)

*Edsger W. Dijkstra*



Gerri schrieb:


> meinst du goto funktioniert nicht immer oder es ist einfach unschön damit zu arbeiten?



Edsger W. Dijkstra hat bereits 1968 die GOTO Anweisung ins visier genommen und sein Statement unter dem Namen "GOTO Considered Harmful" (in etwa GOTO als schädlich betrachten) veröffentlicht. 

GOTO führt nicht automatisch zu Spaghetticode, der Einsatz davon aber aber eben die Tendenz dazu. Es gibt kaum Anwendungen wo so ein GOTO zur besseren Struktur eines Programms beiträgt.

Nicht zuletzt sieht die IEC61131-3 für ST (woran sich SCL ja anlehnt) gar keine GOTO Anweisung vor und das aus gutem Grund, wilde Sprünge führen zu undurchsichtigem Quellcode ala AWL.


----------



## vierlagig (3 Oktober 2009)

volle zustimmung für die verdammung von GOTO ... aber manchmal, wenn man ein/zweitausend zeilen code (sei es SCL oder C# oder ähnliches) debuggen muß, wünscht man es sich schon manchmal her


----------



## Maxl (3 Oktober 2009)

ich kann mich noch grau an meinen VB-Kurs erinnern, wo eine der ersten Anweisungen vom Trainer war: "Hände weg von GOTO!!!"


----------



## bike (4 Oktober 2009)

Also ich würde sagen goto dort wo notwendig ist.

Im Kernel von linux gibt es nach allgemeinen Schätzungen(keiner hat je gezählt  )
Interessant ist, was Linus Torvalds hier:
http://kerneltrap.org/node/553/2131
dazu schriebt



```
I think goto's are fine, and they are often more readable than large
amounts of indentation. That's _especially_ true if the code flow isn't
actually naturally indented (in this case it is, so I don't think using
goto is in any way _clearer_ than not, but in general goto's can be quite
good for readability).

Of course, in stupid languages like Pascal, where labels cannot be 
descriptive, goto's can be bad. But that's not the fault of the goto, 
that's the braindamage of the language designer.

        Linus
```
bike


----------



## Thomas_v2.1 (4 Oktober 2009)

bike schrieb:


> Also ich würde sagen goto dort wo notwendig ist.
> 
> Im Kernel von linux gibt es nach allgemeinen Schätzungen(keiner hat je gezählt  )



Ich gerade mal die gotos in den Kernel-Sourcen auf meinem Rechner mit

```
grep -i 'goto ' /usr/src/linux-source-2.6.18/* -r | wc -l
```
gezählt. Ergebnis:
39149

Dort werden zwar alle Stellen gezählt (auch in Kommentaren etc.), aber Verwendung von goto ist schon enorm.

Eigentlich hat jede ernstzunehmende Sprache ein goto, und bestimmt nicht ohne Grund (wenns nach Pascals Wirth ginge, hätten Strings ja auch nur 255 Zeichen Länge).


----------



## zotos (4 Oktober 2009)

Dann zitiere ich mich halt mal wieder selbst:


zotos schrieb:


> ...
> Es gibt *kaum* Anwendungen wo so ein GOTO zur besseren Struktur eines Programms beiträgt.
> ...



im Bezug auf:



Thomas_v2.1 schrieb:


> ...
> 
> ```
> grep -i 'goto ' /usr/src/linux-source-2.6.18/* -r | wc -l
> ...




Was sind schon knappe 40k Verwendungsstellen bei fast 9Millionen Zeilen Quellcode des Linux-Kernel? ~0,4%

[edit]
OK bei der 2.6.18 Version sind es keine 9Millionen (wie beider aktuellen Version) sondern ~7Millionen... ergibt also irgend was um die 0,6%
[/edit]


----------



## zotos (4 Oktober 2009)

Thomas_v2.1 schrieb:


> ...
> Eigentlich hat jede ernstzunehmende Sprache ein goto, und bestimmt nicht ohne Grund...



Für die Programmiersprache C kann man sogar die Entwickler zitieren:



> "C provides the infinitely-abusable _goto_ statement, and labels to
> branch to. Formally, the _goto_ is *never necessary* , and in practice
> it is almost always easy to write code without it. [...] Nevertheless,
> *there are a few situations where goto may find a place*. The most
> ...


----------

