#NULL hat geschrieben:Das lokale Variablen einen Namen bekommen der bereits ausserhalb verwendet wird ist doch ganz normal, wieviele verschiedene 'i' Variablennamen für Schleifen wollt ihr denn erfinden? Ob nun mit Define oder Protected. Define gibt einen Compiler Fehler wenn die Variable bereits Global, was geht das aber die Prozedur an? Mit Protected ist es ihr egal. Ausserdem wenn man unbedingt keine Namen wiederverwenden will: Protected erlaubt keine Redeklarationen, Define und Global teilweise schon.
Dieses 'i' ist genau eines der Horrorszenarien, wenn ich den gleichen Variablenbezeichner lokal und global verwende. Das mache ich grundsätzlich nicht und der Compiler hilft mir dabei.
Verwende ich aber 'i' global und lokal und du vergisst in einer Prozedur dein 'Protected i', dann hast du den Schlamassel fertig. Da nützt dir kein 'EnableExplicit' was, deine Prozedur verwendet ungeniert dein globales 'i'. Viel Spass bei der Fehlersuche.
RSBasic hat geschrieben:Es geht hier darum, um unnötige Fehler zu vermeiden.
Bingo, genau darum geht es. Deshalb verwende ich auch 'Define'
RSBasic hat geschrieben:Define in Prozeduren ist das falsche Schlüsselwort.
Nenn mir bitte eine Quelle, die deine Sichtweise bestätigt. Aber bitte nicht deine unten angeführten Zitate, denn da sagt keine was aus, dass Define in Prozeduren falsch ist.
RSBasic hat geschrieben:Und Fred und freak (Entwickler von PB) machen es auch falsch?
Deshalb habe ich auch in meinem
Eingangsposting geschrieben, dass es jeder handhaben soll wie er will. Definitiv falsch ist es auf jeden Fall, 'Define' in Prozeduren als Fehler darzustellen.
RSBasic hat geschrieben:Die PB-Hilfe ist deiner Meinung nach auch falsch?
Hier ein paar Zitate aus der PB-Hilfe:
Für den Fall, dass Sie in einer Prozedur 'lokale' Variablen, die den gleichen Namen wie globale Variablen haben, verwenden möchten, schauen Sie sich die Schlüsselworte Protected und Static an.
Protected ("geschützt") ermöglicht den Zugriff auf eine Variable nur innerhalb einer Prozedur, auch wenn die gleiche Variable im Hauptprogramm bereits als Global deklariert wurde.
Neben Static können Sie auch das Schlüsselwort Protected verwenden, um globale von lokalen Variablen zu trennen. Mit Protected behalten die lokalen Variablen jedoch nicht ihren Wert.
[...]
Deine Zitate sind wohl ein Eigentor. Da steht definitiv nirgends, dass 'Define' in Strukturen falsch sind. Du interpretierst dir da was raus, was definitiv nirgends steht. Da steht:
- Für den Fall, dass ...
- Protected ("geschützt") ermöglicht ...
- gar nichts, was 'Define' betrifft
RSBasic hat geschrieben:Es gibt nicht ohne Grund das Schlüsselwort Protected. Wenn es Regeln gibt, muss man diese auch anwenden. Sonst kann niemals ein sauberer Code entstehen.
Sicher gibt es das Schlüsselwort 'Protected' nicht ohne Grund, aber das heißt noch lange nicht, dass 'Define' falsch ist. Nenn mir bitte eine Quelle, die deine Sichtweise bestätigt.
RSBasic hat geschrieben:Josh hat geschrieben:Ich will in meinen Programmen keine lokalen und globalen Variablen mit dem gleichen Namen
Okay, aber das heißt noch lange nicht, dass andere Programmierer genauso schreiben wie du.
Auch wenn ich mich wiederhole, muss ich auf mein Eingangsposting verweisen, wo ich ausdrücklich schreibe, dass jeder es handhaben soll wie er will. Das heißt aber noch lange nicht, dass andere Programmierer so schreiben müssen wie DU.
RSBasic hat geschrieben:Außerdem wirst du beispielsweise bei Schleifen immer das Problem haben. Du hast Variablen wie i, x, y, z u.ä. Benennst du diese Hilfsvariablen immer einzigartig? Was ist, wenn du Codes aus anderen Projekten wiederverwenden möchtest? Da musst du jedes Mal darauf achten, um Namenskonflikte zu vermeiden.
Warum sollte ich mit Schleifen ein Problem haben und warum sollte ich diese Hilfsvariablen immer einzigartig benennen? Kann es sein, dass du das 'Define' in Prozeduren nicht verstanden hast? Irgendwie habe ich langsam diesen Eindruck.
i, j, k werden selbstverständlich in jeder Prozedur definiert wenn ich sie brauche. Sollte ich die Schleifenvariablen mal global brauchen, würde ich ihnen einen anderen Namen verpassen. Dazu habe ich aber weiter oben als Antwort aus #Null's Beitrag schon geschrieben. Wenn ich Codefragmente aus anderen Projekten verwende, dann müssen die ohnehin angepasst werden (ist eine Arbeit von Sekunden). Bei Verwendung von ganzen Pb-Files hatte ich auf jeden Fall noch nie Probleme.
RSBasic hat geschrieben:Josh hat geschrieben:weshalb es bei mir auch bei einem 'Define' innerhalb von Prozeduren bleibt.
Natürlich kannst du Define verwenden, ist aber trotzdem nicht korrekt, nur weil es bis jetzt funktioniert. Und wenn irgendwann bei einer neuen PB-Version eine Einschränkung kommt, dass Define in Prozeduren nicht mehr erlaubt sind, dann musst du natürlich anpassen. Dann lieber gleich richtig machen und anwenden.
Nenn mir bitte eine Quelle, die deine Sichtweise bestätigt, dass Define nicht korrekt ist. Bis jetzt hast du mir nur Textstellen gezeigt, wo du dies fälschlicherweise herausinterpretierst. Sorry RS, aber kommst du dir mit dem Argument, dass 'Define' in Prozeduren in Zukunft nicht mehr erlaubt sein soll nicht ein bisschen blöd vor? Dieses Argument ist einfach nichts als lächerlich.
RSBasic hat geschrieben:Nenn mir bitte eine Quelle, die deine Sichtweise bestätigt.
Ich habe es oben schon einige male erwähnt, aber nenne du mir bitte eine Quelle, die DEINE Sichtweise bestätigt. Bis jetzt hast du gar nichts gebracht.
Abschließend möchte ich nochmals sagen, dass es jeder handhaben soll wie er will, aber es einfach falsch zu behaupten, dass Define in Prozeduren falsch sei, außer jemand hat wirklich angst vor diesen bösen, bösen Kompilermeldungen.
@diceman
Sorry dass dein Beitrag so zweckentfremdet verwendet wird ^^