unschöne Argumentliste



  • Gegeben sei eine Klasse TextField, die es ermöglichen soll, zusätzlich zu Text auch optional eine Grafik einzufügen.

    Der Konstruktur sehe aus wie folgt:

    public TextField(String _text, String _imageName, ImagePosition _imagePosition, double _imageWidth, double _imageHeight);
    {
    ...
    }
    

    Es gefällt mir nun nicht, dass 3 der 5 Argumente hinfällig werden falls ein Text OHNE Grafik erzeugt werden soll. Dann muss ich nämlich bei der Erzeugung eines TextField Objekts schreiben:

    TextField textField("dum di dum", "", ImagePosition.NONE, 0.0, 0.0);
    

    Das heißt nach dem ""-Argument (= Signal, das keine Grafik eingefügt werden soll) sind die anderen drei sinnlos. Kann man das nicht irgendwie schöner hinkriegen?



  • Biete einen zweiten Konstruktor an, der deinen Wuenschen fuer Text ohne Bild entspricht.



  • Autsch. Da hätte ich auch selbst drauf kommen können 😮

    Vielen Dank!


  • Mod

    Wer hat Dir eigentlich diese schrecklichen Unterstriche vor den Variablennamen beigebracht?




  • Mod

    smax schrieb:

    http://geosoft.no/development/javastyle.html

    Ok, auch in dem Styleguide da wird das anders gemacht. Abgesehen davon ist der IMHO einzig relevante Styleguide für Java derjenige von Sun:

    http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html

    Bei den Naming Conventions steht da:

    Variable names should not start with underscore _ or dollar sign $ characters, even though both are allowed.

    Naja, ok. Letztendlich ist das Deine Sache. Ich wollte Dich nur darauf hinweisen, dass das sehr unüblich ist. Aus gutem Grund: Gerade am Anfang des Bezeichners erschweren derartige Sonderzeichen einiges. Typischerweise nutzt man ja Dinge wie Codecompletion und ähnliches in IDEs. Mit so einem Unterstrich hat man dadurch immer eine Extra-Indirektion.



  • Wenn du so viele Parameter uebergeben musst, bietet es sich an eine Daten-Klasse zu benutzen:

    // schlecht
    public TextField(String _text, String _imageName, ImagePosition _imagePosition, double _imageWidth, double _imageHeight);
    {
    ...
    } 
    
    // besser
    public TextField(TextFieldData data);
    {
    ...
    }
    
    class TextFieldData {
    public String _text;
    public String _imageName;
    public ImagePosition _imagePosition;
    public double _imageWidth;
    public double _imageHeight;
    public TextFieldData(String _text, String _imageName, ImagePosition _imagePosition, double _imageWidth, double _imageHeight) { .... }
    
    // fuer Default-Data
    public static TextFieldData createDefault(String _text) {
        return new TextFieldData(_text, "Default", defaultImagePosition, ....);
    }
    }
    

Anmelden zum Antworten