2010年3月19日金曜日

Javaのインターフェースについて現時点での考え。

UMLによるJavaオブジェクト設計第2版を参考。

インターフェースが無い場合、オブジェクトのプロパティ・メソッドを呼び出す場合、そのオブジェクトが何のクラスから作られたかが重要になる。
class Hello {  
  public static void main(String[] args){    
    World w1;
    World2 w2;

    w1 = new World();
    w1.greeding();
    
    w2 = new World2();
    w2.greeding();
    //Hello World.
    //World2.
  }
}

class World {
  public void greeding(){
    System.out.println("Hello World.");
  }
}

class World2 {
  public void greeding() {
    System.out.println("World2.");
  }
}

これに対して、インターフェースを用いると、同じような時、インターフェースを実装しているかどうかが重要となる。
class Hello {  
  public static void main(String[] args){    
    IHello hello;
    
    hello = new World();
    hello.greeding();
    
    hello = new World2();
    hello.greeding();
    //Hello World.
    //World2.
  }
}

class World implements IHello {
  public void greeding(){
    System.out.println("Hello World.");
  }
}

class World2 implements IHello {
  public void greeding() {
    System.out.println("World2.");
  }
}

2010年3月1日月曜日

Google Go LanuguageでShellコマンドを実行する。

参考ページ1(Google Code Search)
参考ページ2

test_exec.go
//コピーアンドペーストの産物
package main  

import (  
       "fmt"  
       "exec"  
       "io/ioutil"
)  

func main() {
  //序盤の2つ以外はおまじない?
  cmd, err := exec.Run("/bin/ls", []string{"ls", "/"}, nil, "", exec.Pipe, exec.Pipe, exec.DevNull)
  
  //例外処理?
  if err != nil {  
    fmt.Printf("ERROR EXECUTING COMMAND: %d\n", err)
    os.Exit(1)
  }  
  
  //cmd構造体の中にStdin, Stdoutはあったからexec.Runを実行すると
  //なんか色々起こって、これが可能になるんだと思う。
  cmd.Stdin.Close();
   
  buff, err := ioutil.ReadAll(cmd.Stdout)
  if err != nil {  
    fmt.Printf("ERROR READING OUTPUT: %d\n", err)
    os.Exit(1)
  } else {  //改行するとエラーが出る
    fmt.Printf("COMMAND RESULT: %s\n", buff)
  }  
}
そんなに沢山の言語を使ったことないからわからないけど、凄いクセのある書き方をする言語だと感じた。if文の書き方まで厳密に決まってるし。

将来的にC#みたいに言語仕様がどんどん変わってJavaとかに近づいて行くのか?今のスタンスを維持して独自路線を突き進むのか?

個人的にはGoogleには後者であって欲しい。