Operatörün tanımı

Operatör yükleme bazıları tarafından sunulan bir özelliktir programlama dilleri kullanımına izin verir, operatörlerin yeni veri türlerine onları ayarlayarak işlevler veya yöntemler olarak (örneğin == olarak + = veya). Operatörlerin mutlaka semboller olması gerekmez. Bazen yeni operatörlerin tanımına izin verilir. Bu genellikle sözdizimsel şekerdir ve işlev veya yöntem çağrılarıyla kolayca taklit edilebilir:

Operatörler fonksiyon olduğunda, genellikle operatör aşırı yüklemesinden söz ederiz , çünkü uygulama işlenenlerin türüne göre seçilir (ayrıca ad hoc polimorfizmden de bahsediyoruz). Bu özellikle C ++ ' da durumdur .

Operatör tanımına izin veren tüm diller aşırı yüklemeye izin vermez. Örneğin Python , aşırı yüklemeyi desteklemez, ancak operatörleri özel yöntemlerle tanımlamanıza izin verir.

Operatörlerin örtük olarak çağrılabildiği durumlarda, estetikten daha kullanışlı hale gelirler. Bu operatör olduğu to_sarasında Ruby bir nesnenin ve operatörleri ile bir dizge gösterimini verir PostgreSQL matematiksel dönüşümler tanımlanabilir üzerinde,. PostgreSQL, bu operatörleri kullanan ifadelerde birçok optimizasyon da kullanabilir.

kullanım

Operatörlerin tanımı, özellikle matematiksel yazıma daha yakın bir kod yazılmasına izin verir. Operatör tanımı operatöre ekli kurallara uyulurken kullanıldığında, bir programın okuyucusuna yardımcı olabilir.

Örneğin, *matris çarpımını gerçekleştirecek operatörü veya +iki karmaşık sayıyı toplamak için operatörü tanımlayabiliriz .

// Exemple avec des matrices // ... les variables a et b sont initialisées et sont 2 matrices Matrice c = a * b; // Exemple avec des complexes Complexe i (0, 1); Complexe un (1, 0); Complexe r = i + un;

Kritik

Operatörlerin aşırı yüklenmesi ve yeniden tanımlanması, programcının aynı operatöre işlenenlerinin türlerine göre ince bir şekilde farklı işlevler vermesine izin vererek bir programın okuyucusunu şaşırtabileceği için eleştirildi. Operatörün yeniden tanımlanmasının tipik (kötü) bir örneği , ikili ofset << operatörünün C ++ ' da kullanılmasıdır : ifade

a << 1

çift değeri döndürür bir bir tamsayı değişken ise, (değiştirmeden), ancak, eğer , bir çıkış akımı, daha sonra bunun içine "1" düşecek (ve bu nedenle bunu değiştirme).

Diğer bir örnek, +sol işleneni değiştirmeyen bir matematiksel işleci ( toplama operatörü gibi), onu değiştiren bir işlevle (işleçle karışıklık +=) yeniden tanımlama konusundaki yaygın hatadır .

Bu eleştiri, nesne yönelimli dillere ( sınıflı nesne modelinin ) genişletilebilir : bir yöntemin yeniden tanımlanması, programcının anlamını değiştirmesine izin verir; Bu sorunu önlemek için resmi bir kanıt yoktur .

Katalog