29 Ağustos 2016 Pazartesi

İşlem Sırası - Order of Evaluation

İşlem Sırası - Order of Evaluation
Order of Evaluation bazı işlemlerin hangi sırada yapılacağının tanımlar. Programlama diline göre sıra değişebilir hatta bir dilde tanımlı olan işlem, başka bir dilde tanımsız olabilir. Özellikle Java ve C++ arasındaki farklar çarpıcı olabiliyor.

1. Metod Çağrısı
Metod çağrıları her zaman soldan sağa işlenir. Şöyle bir kod olsaydı
A() * ( B() + C() )
önce A, sonra B ve sonra da C çağrılır. Daha sonra B ve C'nin sonu toplanıp A'nın sonucu ile çarpılır.

2. Aynı parametrenin birden fazla değer değiştirerek kullanılması
Bu işlem soldan sağa olacak şekilde işlenir. Örnek:
t1 = 5;
t2 = t1 + (++t1);
System.out.println (t2);//Sonuç 11'dir
Bu örnek şu şekilde görselleştirilebilir.
    +
  /   \
 t1   ++t1
Örnek:
t1 = 5;
t2 = (++t1) + t1;
System.out.println (t2);//Sonuç 12'dir
Bu tür örnekler çoğaltılabilir. Aşağıdaki kodun sonucunu siz tahmin edin.
int a = 10;
a = ++a * ( ++a + 5);
3. Bileşik Atama İşlemi
Aslında aynı parametrenin birden fazla değer değiştirerek kullanılması ile aynı şey. Ancak biraz daha detaylı olsun diye yeni başlık altına altım. Açıklaması şöyle
If the operator is a compound-assignment operator (§15.26.2), then evaluation of the left-hand operand includes both remembering the variable that the left-hand operand denotes and fetching and saving that variable's value for use in the implied binary operation.
Example 15.7.1-2. Implicit Left-Hand Operand In Operator Of Compound Assigment
In the following program, the two assignment statements both fetch and remember the value of the left-hand operand, which is 9, before the right-hand operand of the addition operator is evaluated, at which point the variable is set to 3.

Şöyledir
int a = 9;
a += (a = 3);  
System.out.println(a); //12int b = 9;
b = b + (b = 3);  
System.out.println(b); //12


23 Ağustos 2016 Salı

NodeList Sınıfı

Giriş
Şu satırı dahil ederiz.
import org.w3c.dom.NodeList;
constructor
Şöyle yaparız.
NodeList nodeList = doc.getElementsByTagName("student");
Şöyle yaparız.
Node channel = ...;
NodeList nodeList = channel.getChildNodes();
getLength metodu
Liste şöyle dolaşılır.
NodeList nodeList = doc.getElementsByTagName("student");
for (int index = 0; index < nodeList.getLength(); index++) {
  Node node = nodeList.item(index);
  ...
}
item metodu
Node nesnesi döndürür. Şöyle yaparız.
NodeList nodeList = ...;
Node child = items.item(2);

Vector Sınıfı

Giriş
Şu satırı dahil ederiz
import java.util.Vector;
constructor
Şöyle yaparız.
Vector<String> vector = new Vector<String>();
add metodu
Şöyle yaparız.
vector.add("...");
contains metodu
Şöyle  yaparız.
if(vector.contains("...")) {...}
elements metodu
Şöyle yaparız.
Enumeration en = vector.elements();
while(en.hasMoreElements()){
  System.out.print(en.nextElement());
}
iterator metodu
Enumerator yerine Iterator kullanılmalı. Şöyle yaparız.
Iterator en1 = vector.iterator();
while(en1.hasNext()){
  System.out.print(en1.next());
}



17 Ağustos 2016 Çarşamba

FileUtils Sınıfı

moveFileToDirectory metodu
Şöyle yaparız.
FileUtils.moveFileToDirectory(
      FileUtils.getFile("src/test/resources/fileToMove.txt"), 
      FileUtils.getFile("src/main/resources/"), true);

16 Ağustos 2016 Salı

DatabaseReference Sınıfı

child metodu
Şöyle yaparız.
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();DatabaseReference ref2 = ref.child (user);//user is the name of user
setValue metodu
Bulduğumuz user nesnesine yeni özellik eklemek için şöyle yaparız.
ref2.child("Wins").setValue("...");

FirebaseDatabase Sınıfı

Giriş
Firebase ile sadece JSON kullanılır.

getInstance metodu
Şöyle yaparız
FirebaseDatabase fb= FirebaseDatabase.getInstance();
getReference metodu
Şöyle yaparız
DatabaseReference ref = fb.getReference();

12 Ağustos 2016 Cuma

Awt Cursor Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.awt.Cursor;
getDefaultCursor metodu
Şöyle yaparız.
/Cursor normal again
this.setCursor(Cursor.getDefaultCursor());
getPredefinedCursor metodu
Şöyle yaparız.
//Wait cursor
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

ScriptEngine Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.script.ScriptEngine;
constructor metodu
Şöyle yaparız.
ScriptEngineManager mgr = ...;
ScriptEngine engine = mgr.getEngineByName("JavaScript");
eval metodu
Şöyle yaparız.
ScriptEngine engine = ...;
String foo = "40+2";
System.out.println(engine.eval(foo));


8 Ağustos 2016 Pazartesi

TypeUtils Sınıfı

Giriş
Bu sınıf org.apache.commons.lang3.reflect paketindedir.

isInstance metodu
Bu metod bence yanlış isimlendirilmiş. Birinci parametrenin, ikinci parametreye atanıp atanamayacağını döner. Şöyle yaparız
Boolean bool = null;

if (TypeUtils.isInstance(bool, Object.class)) {
  System.out.println("bool isInstance Object-true");
} else {
  System.out.println("bool isInstance Object-false");
}
İçi şöyledir.
public static boolean isInstance(final Object value, final Type type) {
  if (type == null) {
    return false;
  }

  return value == null ? 
  !(type instanceof Class<?>) || !((Class<?>) type).isPrimitive() :
  isAssignable(value.getClass(), type, null);
}

4 Ağustos 2016 Perşembe

ScheduledThreadPoolExecutor

Giriş
ScheduledThreadPoolExecutor sınıfı ThreadPoolExecutor sınıfından kalıtır. Bir işin belirtilen zamanda çalışmasını sağlar. Bu sınıfı kullanıcı tarafından verilen işi ScheduledFutureTask ile sarmalar ve kuyruğa ekler.

Bu sınıf ile ScheduledExecutorService aynı arayüzü sağlarlar.

Kuyruk DelayQueue olarak gerçekleştirilir , yani ilk çalışacak işlere göre sıralanmıştır.

constructor
Şöyle yaparız.
ScheduledThreadPoolExecutor s = new ScheduledThreadPoolExecutor(1);
afterExecute metodu
Şöyle yaparız.
s = new ScheduledThreadPoolExecutor(...) {
  @Override
  public void afterExecute(Runnable r, Throwable t) {
    super.afterExecute(r, t);
    ...
  }
};
scheduleAtFixedRate metodu
Şöyle yaparız.
s.scheduleAtFixedRate(new Runnable() {
  @Override
  public void run() {
  ...
  }
}, 0, 10, TimeUnit.SECONDS);
setRejectedExecutionHandler metodu
Şöyle yaparız.

s.setRejectedExecutionHandler(rejectedHandler);
java.util.Timer ile Mukayese
java.util.Timer tek bir thread tarafından çalıştırılır. Eğer bir timer uzun sürerse diğer işlerin zamanının kaymasına sebep olabilir. Bu yüzden birden fazla thread kullanan ScheduledThreadPoolExecutor sınıfı hassas zamanlama işlerinde tercih edilmelidir.