Für so etwas nehme ich sehr gerne Aufzählungen her.
Etwa:
Delphi-Quellcode:
type
TLoginResult = (lrOK, lrErrorWrongPW, lrErrorUserUnknown, ...);
.
.
function Login: TLoginResult;
Und dann mit case im Aufrufer hantieren - idealerweise noch resourcestrings dort einsetzen.
Wann immer möglich, vermeide ich Rückgaben über die Parameter, aber auch nur, weil ich es aus logischen Gründen als für "nicht sehr elegant" empfinde. Das hat aber keine technischen Gründe.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)