IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 13 Temmuz 2013, 21:36   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Java Static Import Kavramı




Java Static Import

Java’da pek fazla bilinmeyen, çok da önemli olmayan bir konuya değinmek istedim static kavramını anlatıp bundan hiç bahsetmemiş olduğumu fark ettiğim zaman...
Python da çalışmış olanlar bilirler, kütüphane import etme sisteminde şöyle birkaç yöntem vardır python’da:

import math

from math import sqrt

from math import *

Buna benzer bir özellik Java’da da mevcuttur. İşte buna static import diyoruz. Oracle’ın bununla ilgili sayfasından bir kısım çeviriyle durumu anlatmaya çalışayım.

Class’ların static metodlarına ulaşmak için programcı, class ismini referans olarak belirtmelidir. classIsmi.metodIsmi şeklinde kullanmalıdır. örneğin;

double r = Math.cos([COLOR="blue"]Math[/COLOR].PI * theta);

Bunu kolaylaştırmak için insanlar bazen static elemanları bir interface’e koyup buradan kullanmayı tercih ederler. Fakat bu kötü bir fikirdir. Aslında bu kötü fikrin bir ismi de var. Constant Interface Antipattern . Bir class’ı sadece başka bir class’ın static elemanları için kullanmak sadece küçük bir detaydır. Bir class bir interface’i implements ettiğinde (uyguladığında), bu class’ın public API’si durumuna gelir. Kodlama detayları public API’lere sızmamalıdır.

static import yapısı, static elemanlara, bunları kapsayan tip olmadan ulaşabilmeye izin verir. Programımız, ya elemanları teker teker import eder;
import static java.lang.Math.PI;
ya da topluca import eder.
import static java.lang.Math.*;
Bunlar import edildikten sonra kullanım şu şekilde yapılır.

double r = cos(PI * theta);

static import bildirimi normal import’a benzerdir. Normal import package’lardaki class’ları import ederken, package ve class belirtmeden kullanmaya izin vererek, class içindeki static elemanları import eder.

Yani, ne zaman static import kullanmalıyız?
- Olabildiğince kaçınarak. Sadece, kullanmadığımızda gereksiz yerel kopyalar oluşturmak zorunda kalıyorsak ya da inheritance ile ilgili yanlış bir kullanıma yol açıyorsa kullanmalıyız. (bkz. Constant Interface Antipattern). Diğer bir deyişle, bir veya birkaç tane class’ın static elemanlara sık sık ulaşmanız gerektiğinde kullanın. Eğer bu özelliği aşırı kullanırsanız, programınızı okunmaz hale getirir. namespaceini import ettiğiniz birçok static elemanla kirletir. Kodunuzu okuyanlar (siz de dahil, birkaç ay sonra düşünün) hangi class’tan hangi static elemanın geldiğini bilmiyor olacak. Bütün static elemanları import etmek özellikle okunabilirliğe zararlıdır. Eğer bir veya iki elemana ihtiyaç duyuyorsanız, sadece onları import edin. Uygun kullanıldığında, static import; programınızı daha rahat anlaşılır, standart fazlalıklardan (class isimleri) arındırılmış bir hale getirir.


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.



Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Yeni başlayanlara anlatırken her zaman, System.out.println (“Hello World”); tabiri problem olur. static import bu konuda fayda sağlayabilir.
Bu durumda artık System bir class oluyor. System.out PrintSteam türünde static bir alan... Bu da başka bir sınıf. Statik nedir peki? (Televizyon, sinyal alamayınca yaptığı şeye de denir) Kurutma makinemizde bile statik olmasını istemiyoruz kodumuzda neden isteyelim, değil mi? Tabii ki alacağımız veri final değilse... Yani biz bunu değiştiremeyeceksek..
Keza, matematiksel ifadeler gerçekten de böyleyken
sin(angle * PI / 180);
alttakinden daha hoş görünmüyor mu?
Math.sin(angle * Math.PI / 180)
Evet, en azından bu kadarcığını, trigonometrik ifadeleri biliyoruz.
Bu paragrafı bir java sitesinden aldım. Buna cevabı örneklerle inceleyelim. Arkadaşımız şunu öneriyor;




Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


İlk kez, static import özelliğinin açıklamasını okuduğumda biraz rahatsız olmuştum bundan.. Neyin nerede olduğunu, kolaylıkla görebiliyorduk bu özelliği kullanmadan. Bu da kodu anlamada çok yardımcı oluyordu. Daha çok static import kullanıldığında, neyin nereden geldiğini anlamak gitgide zorlaşır. Diğer yandan, System.out.println ifadesinin daha az karakter içeriyor olmasını gerçekten çok istediğim zamanlar da oldu. Önemli mi? Hayır. Herkes bu ifadenin neye yaradığını biliyor. Çoğu insan bunun üstüne düşünmez bile. Biri bunu static import ile kullandığında ben daha rahatsız olurdum, çünkü bana, output streaminde bir değişiklik yapılmış olabileceği hissini veriyor.
Mesela;


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Burada hem faydasını hem de zararını bir arada görebilirsiniz.. Output’u unutmayalım.


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


err değişkeni gördüğünüz gibi karışıklığa neden olabiliyor...

Daha farklı bir örnekle tekrar inceleyelim.


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.



[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları sohbet odaları Benimmekan Mobil Sohbet
Cevapla

Etiketler
import, java, kavramı, static


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

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