İPUCU

Python Artificial Intelligence’da en çok kullanılan dildir ve gerekli dökümanların paylaşım alanlar burada paylaşılmaktadır.

Seçenekler

Python ve Korkulan Gerçekleri

lealperen - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
06/2018
Nereden:
Aydın
Mesajlar:
73
Konular:
5
Teşekkür (Etti):
6
Teşekkür (Aldı):
7
Ticaret:
(0) %
28-07-2018 21:20
#1
Exclamation
Python ve Korkulan Gerçekleri
[COLOR="black[SIZE="1 Python Classes Adresteki madde 9.6 da ayrıntılandırılıyor.

Ne yazık ki yinede mangled üyelere şu şekilde erişilebiliyor:
[/SIZE]
[code][SIZE="4
Konu lealperen tarafından (04-08-2018 16:35 Saat 16:35 ) değiştirilmiştir.
Sessizer Teşekkür etti.
kondanta - ait Kullanıcı Resmi (Avatar)
Deneyimli Yazılımcı
Üyelik tarihi:
07/2017
Nereden:
CNCF
Mesajlar:
912
Konular:
36
Teşekkür (Etti):
33
Teşekkür (Aldı):
263
Ticaret:
(0) %
28-07-2018 21:38
#2
Alıntı:
Sadece bu kodlara bakaraktan Test fonksiyonun ne yaptığını anlamak imkansızdır. Yani bu kodu anlayabilmek için analiz() ve uygunMu() fonksiyonlarına bakmamız gerekir ve hatta belkide bu fonksiyonlar içerisinde çağırılan birsürü fonksiyonu incelememiz gerekebilir.

İlk olarak göze çarpan problem uygunMu() fonksiyonunun bool tipinde bir dönüt verip vermeyeceğine garantimizin olmaması.

İkinci olarak göze çarpan problem analiz() fonksiyonunun kim bilir ne yaptığı
İlk if durumu gibi bir string mi döndürecek eğer durum böyle değilse elimizde bazı durumlarda string döndüren ama bazı durumlarda da döndürmeyen bir fonksiyon var (Test() fonksiyonu). Diyelim ki analiz bir int döndürsün bu durumda Test() bir string de döndürebilir bir integer da.
Ilk olarak, bu dil ile alakali bir problem degil diye dusunuyorum. Tamamen gelistiricinin problemi. Eger ben o kodu: checkAvailabilityForHomePageRender(x) gibi bir seye cevirsem, fonksiyona girmeden ne islem yapacagini anlardik degil mi ? Yada analiz() fonksiyonunu alip: `analyzeAvailabilityOfComponents() gibi birseye cevirsek, self explanatory olacaktir.

Vurgulamak istedigim sey, evet aldigi parametrenin ne oldugu da bir bakima trivial olmus oluyor bu noktada. Yani sadece fonksiyon signitureini kontrol etmek bile yeterli olacaktir.

Bunlarin yaninda, Encapsulation adi altinda bahsettigin '_' ve '__' deginmek istiyorum. Acikcasi, var _isLoading = false; seklinde parametre tanimlamak daha kolay ve anlasilir geliyor bana. Private diye scope acmak yada Javadaki gibi herseye Public x = this; gibi uzun uzun yazmaya kiyasla.

Ama tabi ki, bunlar bir gelistirici olarak kendi dusuncemdir, elestiriye de acigim bu konuda sayet yanlis oldugumu dusunuyorsaniz.
---------------------

DevOps Engineer
lealperen - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
06/2018
Nereden:
Aydın
Mesajlar:
73
Konular:
5
Teşekkür (Etti):
6
Teşekkür (Aldı):
7
Ticaret:
(0) %
28-07-2018 21:47
#3
Alıntı:
kondanta´isimli üyeden Alıntı Mesajı göster
Ilk olarak, bu dil ile alakali bir problem degil diye dusunuyorum. Tamamen gelistiricinin problemi. Eger ben o kodu: checkAvailabilityForHomePageRender(x) gibi bir seye cevirsem, fonksiyona girmeden ne islem yapacagini anlardik degil mi ? Yada analiz() fonksiyonunu alip: `analyzeAvailabilityOfComponents() gibi birseye cevirsek, self explanatory olacaktir.

Vurgulamak istedigim sey, evet aldigi parametrenin ne oldugu da bir bakima trivial olmus oluyor bu noktada. Yani sadece fonksiyon signitureini kontrol etmek bile yeterli olacaktir.
Zaten konuda kastedilen problem isimlendirme değil yani o problem her dilde olabilecek bir sorun. Pythona özel olansa fonksiyonun ne getireceğinin bilinememesidir. Bir int de olabilir bir string de örnekte olduğu gibi ismine ne verirseniz verin bu değişmeyecektir zaten. analyzeAvailabilityOfComponents() ne yaptiğini anladim diyelim ama bool mu yoksa int mi dondureceğini nasıl anlayabilirim ?

Encapsulation konusunda da problemim biçim değil bu geliştiriciden gelişiriciye değişbilir ama tam olarak encapsulation yapılmış bile olunmuyor. Python docs üzerinde bu işlemin nasıl yapıldığı detaylıca anlatılmış

Sizin yanlışlığınız yok ancak dilde basit görünen ama büyük çapta ciddi sorunlara yol açabilecek problemler var
Konu lealperen tarafından (28-07-2018 21:54 Saat 21:54 ) değiştirilmiştir.
ihan3t - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
02/2012
Mesajlar:
5.004
Konular:
255
Teşekkür (Etti):
291
Teşekkür (Aldı):
1834
Ticaret:
(0) %
28-07-2018 22:17
#4
Alıntı:
kondanta´isimli üyeden Alıntı Mesajı göster
Ilk olarak, bu dil ile alakali bir problem degil diye dusunuyorum. Tamamen gelistiricinin problemi. Eger ben o kodu: checkAvailabilityForHomePageRender(x) gibi bir seye cevirsem, fonksiyona girmeden ne islem yapacagini anlardik degil mi ? Yada analiz() fonksiyonunu alip: `analyzeAvailabilityOfComponents() gibi birseye cevirsek, self explanatory olacaktir.

Vurgulamak istedigim sey, evet aldigi parametrenin ne oldugu da bir bakima trivial olmus oluyor bu noktada. Yani sadece fonksiyon signitureini kontrol etmek bile yeterli olacaktir.

Bunlarin yaninda, Encapsulation adi altinda bahsettigin '_' ve '__' deginmek istiyorum. Acikcasi, var _isLoading = false; seklinde parametre tanimlamak daha kolay ve anlasilir geliyor bana. Private diye scope acmak yada Javadaki gibi herseye Public x = this; gibi uzun uzun yazmaya kiyasla.

Ama tabi ki, bunlar bir gelistirici olarak kendi dusuncemdir, elestiriye de acigim bu konuda sayet yanlis oldugumu dusunuyorsaniz.
Mesele methodun ne yaptığının anlaşılması değil.

Python gibi dynamic typing dillerde birçok design pattern kullanılabilirliğini yitiriyor.

Örneğin visitor patterni ele alalım. Static typing bir dil ile şu şekilde implement edebiliriz :
Kod:
abstract class BaseType { }

class SomeXType extends BaseType { }

class SomeYType extends BaseType { }

class SomeZType extends BaseType { }

class SomeVisitor() {

    public **** visit(SomeXType t) {
        System.out.println("x type is : " + t.getClass().getName());
    }


    public **** visit(SomeYType t) {
        System.out.println("y type is : " + t.getClass().getName());

    }

    public **** visit(BaseType t) {
        System.out.println("base type is : " + t.getClass().getName());
    }

}
Ben developer olarak biliyorum ki, base type ı inherit etmiş herhangi bir tipi parametre olarak visit metoduna geçebilirim.

Şöyle ki :

Kod:
public class Main {

    public static **** main(String[] args) {
        SomeVisitor visitor = new SomeVisitor();

        SomeXType x = new SomeXType();
        SomeYType y = new SomeYType();
        SomeZType z = new SomeZType();

        visitor.visit(x);
        visitor.visit(y);
        visitor.visit(z);
    }
}
Bu kodun çıktısı şu şekilde olur :

Kod:
x type is : SomeXType
y type is : SomeYType
base type is : SomeZType
Pythonda bunun tam karşılığı yoktur..

Tek sorun bu da değil, pythonda bir metod return tipi olarak farklı değerler döndürebilir. Bu metodu çağıran yer string tipinde beklerken int tipinde cevap alması durumunda kodu yönetebilmesi için her yere if elseler koymak zorunda kalacak.. Oysa ki static typing dillerde böyle bir durum yok.

Aynı zamanda birçok hataya runtime da denk geliriz. Çünkü compile time yok, çünkü static typing değil..

İkincisi encapsulation konusuna gelirsek, javada her şeye public yazılmaz. Classları sadece data holder olarak tasarlayıp public fieldlar açıp direkt erişim sağlamak anemic bir domain modeli oluşturduğunu gösterir. Object orienteddan uzaktır. Aynı şekilde bu fieldları private yapıp hepsi için getter setter tanımlamakta oop ye aykırıdır. Object oriented programmingde classlar data + behavior ikilisini bir arada bulundurmalıdır. Objelerin stateleri behaviorlar aracılığıyla değiştiriliyor olmalı, aksi taktirde anemic yapıda classlar oluşmaya başlar ve bu tarz projeler zaman geçtikçe legacy olup içinden çıkılmaz bir hal alır.


Python güzel ve sevdiğim bir dil, dynamic typing ve static typing ikisininde avantajları var. Fakat static typingin bariz üstünlüğü olduğu konular var.
---------------------
Computer Engineer.

Senior Software Engineer.
Konu ihan3t tarafından (28-07-2018 22:19 Saat 22:19 ) değiştirilmiştir.

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı