Translate

2013年8月17日土曜日

Perlでクラスを書く

学習のため、某JavaのソースコードをPerlで表現してみる。

class Rectangle {
    int width;
    int height;
    void setSize(int w, int h){
        width = w;
        height = h;
    }
    int getArea(){
        return width * height;
    }
}

perlだとコンストラクタは必須なのでnewは書くとして
・値はsetSizeで指定する
・getAreaにて面積を求めあたいを返す
これを表現します。
package Rectangle;
use strict;
use warnings;
use utf8;
binmode STDERR, ":utf8";

sub new{
    return bless {width=>0, height=>0}, shift;
}
                                                                                   
sub setSize{
    my $self = shift;

    if(@_!=2){die("setSizeの引数を2つ指定してください(width, height)")}
    $self->{width}  = $_[0];
    $self->{height} = $_[1];
}

sub getArea{
    my $self = shift;
    return $self->{width} * $self->{height};
}

1;
JavaやJavascriptと言った言語だと自動的にthisを参照すると自分自身のオブジェクトを参照できるけども
Perlだとshiftをすることで他の言語のthisの代わりのようなことができると。
つまり第一引数に自動的にオブジェクトがはいっているので取り出したら使えるよってことね。

ちなみに、blessのとこでJavaで言うとこのプロパティを用意しています。
使ってみます
use strict;
use warnings;
use utf8;  
use feature 'say';
binmode STDOUT, ":utf8";

use lib qw(lib);
use Rectangle;

my $r = Rectangle->new();
$r->setSize(123, 45);

say "幅 :". $r->{width};
say "高さ:". $r->{height};
say "面積:". $r->getArea();

Perlのクラス作成 メモ

Perlのクラス作成について自分用のチートシート的にまとめておく

クラス作成で最小の状態は以下の通り
package クラス名;

sub new{
    return bless {}, shift;
}

1;




面積を求めるRectangleクラスを例に考える
コンストラクタでwidth と heightの値を設定し
getAreaで面積を求める

ファイル名:lib/Rectangle.pm
package Rectangle;
use strict;
use warnings;
use utf8;
binmode STDERR, ":utf8";

my ($width, $height);

sub new{
    return bless {}, shift;                                                        
}

sub setSize{
    my $self = shift;

    if(@_!=2){die("setSizeの引数を2つ指定してください(width, height)")}
    $width  = $_[0];
    $height = $_[1];
}

sub getArea{
    my $self = shift;
    return $width * $height;
}

1;

ファイル:Sample.pl
use strict;                                                                        
use warnings;
use utf8;
use feature 'say';
binmode STDOUT, ":utf8";

use lib qw(lib);
use Rectangle;

my $r = Rectangle->new();
$r->setSize(123, 45);
say $r->getArea();

2013年8月15日木曜日

Gitを一人で使うさいのメモ

■初期準備
git init



[WorkTree] → [Index] → [repository]

■Indexに追加
git add [file]指定したファイルをIndexに追加
git add .全てのファイルをIndexに追加する
git add -uCommit済みファイルのうち変更のあったものだけ追加
git add -pIndexへの追加を、変更箇所単位(ハンク)で追加
git add -Agit add . + git add -u



[WorkTree] ← [Index] ← [repository]
■Indexから削除
git reset HEAD [file]ステージへの登録を解除する


[WorkTree] → [Index] → [repository]
■コミット
git commit -m "内容"1行メッセージと共にコミットする



■バージョン管理下から除外する
git rm [file]バージョン管理下からはずし、ファイル自体も削除する
git rm --cached [file]バージョン管理下からはずす(ファイルは残す)



■状態の確認
git statusgitの状態を表示
git logコミットログを表示
git log -数字数字分コミットログを表示
git log -pコミットログにパッチ(差分情報)を追加して表示
git log --pretty=shortコミットログ(1行目の要約文のみ)を表示

2013年5月25日土曜日

クラス HelloWorld は public であり、ファイル HelloWorld.java

helloworld.java:1: クラス HelloWorld は public であり、ファイル HelloWorld.java
で宣言しなければなりません。
public class HelloWorld
       ^
エラー 1 個

クラス名とファイル名を揃えなさいって話ね。

Javaでコンパイルしたら文字化けしましたとさ@Mac

ターミナルがUTF-8なのに対し、コンパイル後のメッセージがShiftJIsなため
文字化けるというお話。

なので、全てUTF-8に統一してしまえばよいよね。
ということでメモ
## alias
alias java='java -Dfile.encoding=UTF-8'
alias javac='javac -J-Dfile.encoding=utf-8'


これで
javac ファイル名.java でコンパイル
java ファイル名 で実行。