ES6 alıcıları ve ayarlayıcıları, Java'daki benzer kavramlardan önemli ölçüde farklı bir motivasyona sahiptir.
Java'da alıcılar ve ayarlayıcılar, bir sınıfın bir JavaBean tanımlamasına izin verir. Alıcıların ve ayarlayıcıların amacı, fasulyenin genel alanların ima ettiğinden tamamen ortogonal bir "arayüze" sahip olmasına izin vermesidir. Böylece, JavaBean özelliği OLMAYAN bir alan "adı" alabilirim ve alan OLMAYAN bir JavaBean özellik "adresine" sahip olabilirim.
JavaBean özellikleri, Java yansıması aracılığıyla binlerce çerçeve tarafından da (örneğin Hazırda Bekletme) "keşfedilebilir". Bu nedenle, alıcılar ve ayarlayıcılar, fasulye özelliklerini "açığa çıkarmak" için standart bir yöntemin parçasıdır.
Getiriciler ve ayarlayıcılar, işlev olarak, uygulamayı "soyutlama" değerine de sahiptir. EITHER bir alan veya hesaplanmış ("sentetik") bir değer olabilir. Yani "zipcode" adında bir bean özelliğim varsa, bu depolanmış dize olarak başlar. Şimdi, bunu adresten / şehirden / eyaletten hesaplanan bir değer olarak değiştirmek istediğimi varsayalım.
Bir alan kullanırsam, bu kod bozulur:
String zipcode = address.zipcode();
Ancak bir alıcı kullanırsam, bu bozulmaz:
String zipcode = address.getZipcode();
JavaScript, JavaBeans gibi bir şeye sahip değildir. Okuduğum kadarıyla, GET ve SET'in amaçlanan değeri yukarıda belirtilen "sentetik" (hesaplanmış) özelliklerle sınırlıdır.
Ancak, Java bir "alanı" bir yönteme uyumlu bir şekilde dönüştürmenize izin vermezken, ES6 GET ve SET buna izin verir.
Yani, eğer sahipsem:
var zipcode = address.zipcode;
Posta kodunu standart bir nesne özelliğinden bir alıcıya değiştirirsem, yukarıdaki kod artık GET işlevini çağırıyor.
Tanıma GET'i dahil etmezsem, bunun GET posta kodu yöntemini ÇAĞIRMAYACAĞINI unutmayın. Bunun yerine, yalnızca işlevin posta kodunu var.
Bu yüzden bunların, Java ve JavaScript ES6 alıcıları ve ayarlayıcıları arasındaki anlaşılması gereken bazı önemli ayrımlar olduğunu düşünüyorum.