Hallo zusammen,
Oder hat schon mal jemand ernsthaft Goto verwendet?
In[10]:= First[
Transpose[
Select[Transpose[{#, FindList[#, "Goto"] & /@ #} &[
FileNames[
"*.m", {"S:\\Program Files\\Wolfram \
Research\\Mathematica\\8.0"}, \[Infinity]]]], #[[2]] =!= {} &]]]
Out[10]= {"S:\\Program Files\\Wolfram
Research\\Mathematica\\8.0\\AddOns\\Applications\\CCodeGenerator\\CCodeGenerator.m",
"S:\\Program Files\\Wolfram
Research\\Mathematica\\8.0\\AddOns\\Applications\\SymbolicC\\SymbolicC.m",
"S:\\Program Files\\Wolfram
Research\\Mathematica\\8.0\\SystemFiles\\Kernel\\TextResources\\English\\FunctionInformation.m",
"S:\\Program Files\\Wolfram
Research\\Mathematica\\8.0\\SystemFiles\\Kernel\\TextResources\\English\\Messages.m",
"S:\\Program Files\\Wolfram
Research\\Mathematica\\8.0\\SystemFiles\\Kernel\\TextResources\\English\\Usage.m",
"S:\\Program Files\\Wolfram
Research\\Mathematica\\8.0\\SystemFiles\\Links\\DatabaseLink\\DatabaseLink.m",
"S:\\Program Files\\Wolfram
Research\\Mathematica\\8.0\\SystemFiles\\Links\\DatabaseLink\\Kernel\\SQL.m",
"S:\\Program Files\\Wolfram
Research\\Mathematica\\8.0\\SystemFiles\\Links\\DatabaseLink\\PacletInfo.m",
"S:\\Program Files\\Wolfram
Research\\Mathematica\\8.0\\SystemFiles\\Links\\GPUTools\\CodeGenerator.m"}
Die Stellen in Messages.m und Usage.m beziehen sich auf Goto[] selbst, die
Stellen in CCodeGenerator.m und SymbolicC.m implementieren CGoto[] (Hilfe:
SymbolicC/ref/CGoto).
Mma verwendet Goto[] anscheinend nicht, es implementiert es nur.
Was heisst ernsthaft? Goto wurde gegeisselt, weil es keine Rücksicht auf
Strukturen nehmen muss, z.B.
int i;
for ( i = 0; i < 100; i++) {
doSomething( i);
backAgain:
i = doMore( i);
if ( i > aLimit) {
goto flyAway;
}
}
while ( 1) {
doThisSometimes( i);
flyAway:
i = doComplete( i);
if ( i < aLimit) {
goto backAgain;
}
}
und daher das Schweizermesser der unstrukturierten Programmierung ist.
In diesem Sinne wird es heute nicht mehr "ernsthaft" verwendet.
Bei strukturierter Verwendung ist gegen goto nichts einzuwenden.
Gruss
Udo.