Właściwości czy gettery i settery?

0

Co sądzicie o wprowadzenie następującej składni do Javy by kod wyglądał zamiast takiego:

package awesome;
public class Program
{
    public static void main(String[] args)
    {
        AnyObject obj = new AnyObject();
        obj.setMark(0xFFFFF);
        System.out.println(obj.getMark());
    }
}
package awesome;
public class AnyObject()
{
    private long mark;
    public long getMark() { return this.mark; }
    public void setMark(long mark) { this.mark = mark; }
}

takiej:

package awesome;
public class Program
{
    public static void main(String[] args)
    {
        AnyObject obj = new AnyObject();
        obj.Mark = 0xFFFFF;
        System.out.println(obj.Mark);
    }
}
package awesome;
public class AnyObject()
{
    public long Mark { get; set; }
}

???

0

I po co? Jak nie programujesz lodówką to gettery/settery generują sie automatycznie a kod można foldować, więc nawet nie będziesz ich widział. O takich rzeczach jak https://projectlombok.org/features/GetterSetter.html to nawet nie wspominam bo zjadają te c# rozwiazania na śniadanie jeśli komuś brakuje takiego cukru syntaktycznego.

0

Ze względu na refaktoring nazw pól klasy koncepcja jest ciekawa. Chyba, że w odróżnieniu od lodówek, statki kosmiczne to potrafią (zmiana nazw getterów/setterów przy zmianie nazwy pola). Nie wiem, bo nie używam jedynie słusznego edytora.

Shalom napisał(a):

O takich rzeczach jak https://projectlombok.org/features/GetterSetter.html to nawet nie wspominam bo zjadają te c# rozwiazania na śniadanie jeśli komuś brakuje takiego cukru syntaktycznego.

To chyba dla tych, którzy pragną awnasować ze stanowiska programisty na adnotatora bibliotek wszelakich.

0

To chyba dla tych, którzy pragną awnasować ze stanowiska programisty na adnotatora bibliotek wszelakich.

W tej kwestii się zgodzę, za dużo tych adnotacji. Ale zwykłe { get; set; } jest zbyt mało elastyczne. To, że get; set; oznacza generację settera i gettera to jedno ale programista powinien móc napisać własną implementację get i set oraz powinno ustalać się w nim parametry tak jak w adnotacjach, np gdzie można tego uzyć. Sądzę, że lepszym rozwiązaniem byłoby dodanie nowej funkcjonalności w Javie, które przejęłaby część zastosowań adnotacji, a ich działanie byłoby podobne. Można to przyrównać do struct i class w C++ niby są podobne( struct - public class - private, reszta to samo ), ale sposób zastosowania jest całkiem inny.

0

Nie wiem, czy ma sens wprowadzanie składni C# do Javy. Generalnie, jak nie chcesz pisać getterów i setterów, to zainteresuj się np. językiem Kotlin i klasami typu Data, które generują cały javowy boilerplate na etapie kompilacji. Wtedy jak się uprzesz, to model zdefiniujesz w jednej linii. Scala ma chyba podobny mechanizm, ale nie znam specjalnie tego języka, więc mogę się mylić. Programy w obu językach odpalisz na JVM tak samo, jak program w Javie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1