雑文発散

«前の日記(2015-06-03) 最新 次の日記(2015-06-05)» 編集
過去の日記

2015-06-04 [長年日記]

[PHP][Java] イマドキの PHP を書いていれば Java は比較的理解しやすいんだなぁと、いまさらながら思っている

これまでは触る必然性が無かったし、あまり触りたい感じがしてなかったので Java のコードをまともに書いたことがなかったんだけど、ちょっと必然性が出てきたのでここ2〜3日書いている。

2〜3日書いているといっても、まずはテストをどうやって書いて実行すればいいんだ?ってところを探ってからのスタートだったので、実質的なコードを書き始めたのは今日からになる。

で、ようやくコードを書き始めて思ったのが、いまどきの PHP と Java はそっくりなんだなってこと。

まぁ、PHP が Java のほうを向いて拡張をしてきたという雰囲気が感じられるし(要出典)、似てくるのはそういうものなんだろうなという気分ではあるけど、改めて見ると、ホントにまぁ、そっくりだ。

  • Java の例
pacakage example.foo;

import example.module.Status;

public class Bar extends BaseClass implements BaseInterface {
    private String str = "string";

    public boolean function checkStatus(Status status) {
        boolean result = status.isOk();

        return result;
    }
}
  • PHP の例
namespace Example\Foo;

use Example\Module\Status;

class Bar extends BaseClass implements BaseInterface {
    private $str = 'string';

    public function checkStatus(Status $status) {
        $result = $status->isOk();

        return $result;
    }
}

ちなみに Java のデファクトコード規約はよく分かってないのでこういう書き方にしてみている。PHP の方は Java に似せるためにあえて PSR-2 を無視している。動かしてないので動かないかも(動いても意味ないコードだけど)

また、JUnit と PHPUnit も考え方がほぼ同じ。JUnit が先にあって、その考えをベースに PHPUnit が作られた(要出典)から当たり前なんだろうけど。

  • JUnit の例
pacakage example.foo;

import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.Before;

public class BarTest {

    private Bar bar;

    @Before
    public void setUp() {
        bar = new Bar();
    }

    @Test
    public void testCheckStatus() {
        assertTrue(bar.isOk());
    }
}
  • PHPUnit の例
namespace Example\Foo\Test;

use Example\Foo\Bar;

class BarTest extends PHPUnit_Framework_TestCase {

    private $bar;

    protected function setUp() {
        $this->bar = new Bar();
    }

    public function testCheckStatus() {
        $this->assertTrue($this->bar->isOk());
    }
}

これも動かしてないので動くかどうか分からんけど、setUp() 的なところとか、assert あたりの考え方もほぼ同じ。

さらに PHP7 になってくると、メソッドの戻り値の型指定が可能になったり、引数の型(タイプヒント)が増えたりして、もっと Java に似た形になっていきそうな気配。

こうなってくると「もはや PHP でなく Java で良いのでは?」という気分が少し湧いてきてしまうなぁ。

あと、最近触り始めている Elasticsearch や Hadoop も Java だし、もうちょっと Java の知識も増やしていきたい気分もある。書いていて楽しいか?ってのは、また別として、基礎知識は持っておきたいな。