![]() |
Passwort Eingabe
Es wird ein Passwort eingegeben. Hat jemand vielleicht eine Funktion für Passwort Überprüfung? Passwort (wird 2 mal eingegeben) sollte min. 6 Zeichen haben. Ich weiß nicht was ich eigentlich prüfen sollte und wie? was ist Sinnvoll?
Mit freundlichen Grüßen Jonson |
Auch schon so probiert:
Code:
Oder habe ich dich jetzt komplett falsch verstanden?
function IsValidPassword(const Password, ConfirmPassword): Boolean;
begin Result := (Length(Password) >= 6) and (Password = ConfirmPassword); end; |
@jbg: Danke!
Jonson |
Hi jbg,
bei Length(Password) Fehler: Inkompatible Typen Jonson |
Einfach Copy&Paste ist nicht. Dafür habe ich schon gesorgt. :roll:
Ich habe vergessen beim Prozedurkopf : string mit anzugeben. Aber da hättest du auch selbst drauf kommen können. |
Zitat:
|
Hi jbq,
Ich will kein Pastaprogrammierer sein :oops: , darum sage mir bitte warum schreibt man hier const. Wozu ist das gut? Es funktioniert auch ohne const Jonson |
Wenn ein String an eine Prozedur/Funktion übergeben wird, dann wir er sozusagen kopiert. Dieses Kopieren ist wichtig, damit in der Funktion bei einer Änderung des Strings nicht gleich die übergebene Variable verändert wird. Wenn aber klar ist, dass dieser String gar nicht in der Funktion verändert werden soll, dann kann man mit der Angabe von const einen Geschwindigkeitsgewinn erziehlen, da der String nun nicht mehr kopiert werden muss, weil der Compiler schon verhindert, dass überhaupt in den String geschrieben werden kann.
|
Hm, ich hätte jetzt gesagt:
Wird der Parameter ohne const übergeben, dann wird eine Kopie angelegt von dem String auf dem Stack beim Aufruf. Wird der Parameter mit const übergeben, wird die Zeichenkette nicht kopiert sondern nur ein Zeiger auf die Zeichenkette auf dem Stack abgelegt., was Geschwindigkeitsvorteile bringt. |
Also, mal eine kurze Aufklärungsminute... :D
Parameter mit var Es wird genaugenommen ein Pointer auf die Originalvariable übergeben. Wenn die Methode die Variable ändert, dann ändert sich auch das Original. Parameter mit const Dem Compiler wird deutlich gemacht, wiederum einem Pointer zu überreichen. Der Programmierer verbietet sich selbst, den Inhalt der Variable zu ändern. Parameter ohne var/const Der Compiler legt eine Kopie der Variable an. Diese kann geändert werden. Sollte der Inhalt sich nicht ändern, dann arbeitet Delphi (ab Version 4 od. 5) intern genauso, als wäre die Variable mit const deklariert. Bei Pascal-Strings wird zusätzlich noch der Referenzcounter gesetzt/gelöscht. Ich hoffe, dass dieses ein wenig Aufschluss gibt. Tags gefixt - Luckie |
Zitat:
|
Moin Zusammen,
was man dabei aber auch wieder nicht vergessen darf: Wird als Parameter ein Objekt übergeben, z.B. eine StringListe, so können auch dann Werte verändert werden, selbst wenn dieser Parameter als const übergeben wird, da der Inhalt des Parameters so oder so eine Referenz auf das Objekt enthält. Solange kein String als Wertparameter übergeben wird (also ohne var/const) nehmen sich die Varianten bezüglich ihrer Geschwindigkeit nicht viel. |
Hi,
also kurz als Erweiterung um Christians Kommentar mit einzubeziehen. Wenn ein Objekt als Parameter übergeben wird, dann kann man generell auf alle (öffentlichen) Methoden und Eigenschaften des Objektes zugreifen und somit den Inhalt ändern. Object als var: Der alte Pointer (intern als Pointer) zum Objekt kann gelöscht/überschrieben werden. Objekt sollte wahrscheinlich vorher zerstört werden, um alle Ressourcen freizugeben. Der Aufrufer benutzt nach dem Methodenaufruf das neue Objekt. Object als const: Der alte Pointer kann nicht geändert werden - aber die Methoden und Eigenschaften des Objektes können genutzt/geändert zu werden. Object ohne var/const: Wie bereits bei normalen Variablen - der Pointer wird kopiert, sollte dieser innerhalb der Methode geändert werden. Er wird belassen, wenn keine Neuzuweisung auf den Pointer erfolgt. :) Danke Christian - jetzt sollte (hoffentlich) diese Frage vollständig geklärt sein. |
Muss man das verstehen?
Hi ihr.
Ich hab jetzt versucht zu verstehen, was da steht, aber irgendwie bin ich nicht ganz mitgkommen. Wenn man einen Parameter mittels var übergibt, ändert man doch den Inhalt der Variable. Mit const kann man ihn nicht ändern(denke ich). Wenn man den Parameter ohne var/const deklariert, wird eine Kopie auf dem Stack angelegt. Selbst wenn ich eine StringListe per const übergebe, kann ich deren Inhalt ändern. Ich versteh das nicht. Da hat Borland wohl Mist gebaut. Gute Nacht an alle, Susi. |
Moin Susi,
ich weiss gar nicht, was Du willst? So wie es aussieht hast Du es doch verstanden, nur was ein Objekt ist vielleicht noch nicht so ganz. ;-) Eine Variable, die ein Objekt darstellt enthält nur den Zeiger auf das Objekt. (Leider (zum Glück!?) hat Borland es verstanden dies so schön zu kapseln, dass es nicht unbeding sofort auffällt.) Dadurch sind alle Eigenschaften/Methoden des Objektes zugänglich. Beispiel StringListe: Die Methode Add ist dafür zuständig neue Strings an die Liste anzuhängen. Da diese ja zugänglich ist, funktioniert auch das Add. Was hingegen nicht geht, wenn der Wert als Konstante oder Wertparameter übergeben wird, ist es den Inhalt auf ein anderes Objekt zu ändern. Könnte auch fatal sein (und in Speicherlecks münden), wenn vorher nicht das ursprüngliche Objekt wieder freigegeben würde. Das ist das gleiche Prinzip, wie bei den API Funktionen. Sollen hier die Funktionen Werte zurückliefern, so wird oft einfach die Adresse eines Speicherbereiches übergeben, in den die Funktion dann die Ergebnisse schreiben kann. Dabei stört es dann auch überhaupt nicht den Parameter als Konstant(e) anzugeben. Der Pointer reicht, um dieses zu ermöglichen. Wenn Borland "Mist gebaut" hat, dann bei der Deklaration der einen oder anderen API-Funktion. Die lassen sich oft nicht so aufrufen, wie es laut PSDK gehen sollte. :-( BTW: |
Hallo Susi_W,
die Aussage: Zitat:
Code:
denn der Wert auch als Var Parameter übergebener Variablen wird sonst nicht verändert. :roll:
, wenn man dem Parameter innerhalb der Procedure / Function einen Wert zuweist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz