Re: [Linux-programlama] Java - if :)

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Cafer ÅžimÅŸek (cfb@cafer.org)
Date: Mon 12 Feb 2007 - 06:32:12 EET


"Yuce Tekol" <yucetekol@gmail.com> writes:

> Merhaba,
>
>> Aşırı
>> yüklenebilir işleçler, sözdizimsel tatlandırıcılardan başka bir şey
>> değil bana göre.
>
> Nesne yonelimli programlama da sozdizimsel tatlandiricidan baska
> birsey degil aslinda, ama C'de nesne yonelimli bir yapi kurmanin
> zorlugunu dusunurseniz, bazi sozdimsel tatlandiricilarin isimizi
> kolaylastirdigini da kabul etmelisiniz.

Elbette bunu kabul ediyorum. Ancak gerekliliği konusunda şüphelerim
var (nesnellik konusu tamam ancak işleçlerin aşırı yüklenmesi
gerekliliğinde şüphelerim var). Her ne kadar nesnel tasarım ve
programlama günümüzde yaygın olsa da bunu tümüyle (ve fanatizm
seviyesinde) reddeden bazı kesimlerin olduğunu da biliyorum (şu an
hatırımda olmadığı için link veremiyorum ama bu konuda bir makale
okumuÅŸtum).

>
>>
>> if (a == b) {
>>
>> yerine
>>
>> if (a.equals(b)) {
>>
>> yazmanın ne farkı var?
>>
>> Kabul ediyorum, okunabilirlik açısından üstteki daha güzel
>
> :-)
>
> Asil sorun, Java'da neden iki tamsayiyinin degerlerinin esitligini ==
> ile karsilastiriyoruz da stringleri equals() ile karsilastiriyoruz.
> Bunun sebebi tabii ki tamsayilarin ilkel tip, stringlerin ise nesne
> olmalari, ama programci olarak benim icin aradaki farkin onemsiz
> olmasi gerekir; en azindan benzer bir durumun oldugu C++ gibi =='in
> nesneye gore tanimlanmasi saglanmaliydi. Eger ayni islemi C'de
> !strcmp(a, b) seklinde yazdiginizi dusunurseniz, bu konuda Java'nin ne
> kadar geride oldugunu gorebilirsiniz (C seviyesinde).
>

Java geliştirilirken sanırım C'den fazlasıyla
esinlenmiÅŸler. Biliyorsunuz, C'de de string diye bir tip
bulunmuyor.

Java'nın söz dizimi olarak çok geride olduğunu elbette kabul etmemek
elde deÄŸil. Her ne kadar nesnel bir dil olsa da ideal bir nesnel
sözdizimi sunamıyor. Şimdiye kadar incelediğim diller arasında ideal
ortama en yakın olanlar bence C# ve Ruby.

Diğer yandan (sözdizimi haricinde kalan konularda) .Net ile platform
olarak yarışabilecek seviyede. Daha da üstünü platform bağımlılığı
bulunmuyor (kimileri Mono diyecektir ama ben Mono ile yapılmış
kurumsal seviyede bir uygulama görmeden bu fikrimi değiştirmeyeceğim).

(Sanırım konu başka yerlere sapacak, devam edelim :) )

>> okunabilirlik mi önemli yoksa kodun ileride (bakım, güncelleme
>> işlemleri sırasında) sorun çıkartmaması mı iyi?
>
> Kodun okunabilirligiyle, bakiminin kolayliginini dogru orantili
> oldugunu dusunuyorum.
>

Büyük oranda buna da katılıyorum. Ancak bazı istisnai durumları da
unutmamak gerek. Hemen basit bir örnek (okuduğum bir C++ kitabından
aklımda kaldığı kadarıyla):

if (f1() && f2()) { ... }

şeklinde bir şartımız olsun. f1() ve f2() ise, && işleci aşırı yüklenmiş
bir nesne döndürüyor olsun.

&& işleci aşırı yüklenmediği zaman biliriz ki && işleci varsayılanda
önce sol tarafı işler sonuç mantıksal yanlış (false) ise sağ tarafı
işlemez. Ama sonuç mantıksal doğru (true) ise sağ tarafın sonucu tüm
şartın sonucunu belirler. Bakım yapan bir programcı, döndürülen
nesnenin aşırı yüklenmiş bir && işlecine sahip olduğunu bilmiyorsa, bu
bir sorundur. f1() false dönerse f2() çalışmayacak diye
değerledirecektir. Oysa && işleci aşırı yüklendiği için bu durumda
şart şu hali alacaktır:

if (NESNE.operator&&(f1(), f2())) { ... }

Yani her durumda her iki fonksiyon da çalıştırılacaktır.

Küçük bir örnekti sadece, çoğaltılabilir.

> Yuce Tekol.

[...]

Sevgiler.

-- 
Cafer 'cfb' ÅžimÅŸek
http://cafer.org

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.