2008-08-01から1ヶ月間の記事一覧

printのバッファ機能

perlのprint関数は標準でバッファをするみたいです。 なぜ? システムコールを少なくするため。 printが呼び出されるたびにシステムコールをするのと、 バッファにある程度、溜まったらシステムコールするのとでは 後者のほうがシステムコールを少なくできる…

ArrayList

Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle 大きさが決まっていないものを配列に格納したいときは、ArrayListを使うみたいです。 今のところ、よく分かってません。 public class Test { public static void main…

オーバヘッド オーバーヘッド overhead

直訳すると、頭の上の。 コンピュータ用語で、目的としている処理を達成するうえで余計にかかってしまう処理のことを言う。のかな多分。 使用例 「オーバヘッドが大きすぎます。書き直して下さい。」 「バッファを使えば、オーバーヘッドを少なくできます。…

Calendar

Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle Calendarを使ってみた。 1 import java.util.Calendar; 2 3 class CalendarTest { 4 5 public static void main(String[] args) { 6 7 Calendar day = Calendar.getIns…

@配列名

perlでも配列変数を作成することができます。 $変数名[インデックス] 配列変数への値の代入は以下のように $arg[0]=0; $arg[1]=1; $arg[2]=2; します。でも、配列の数が10個とかに増えたときにこのような代入をするのは面倒です。 そこで @配列名 という記…

リストコンテキストとスカラーコンテキスト

リストコンテキスト 配列全体を表す。 ($a,$b,$c) = @arg; @arg = (0,1,2); @arg2 = @arg1; スカラーコンテキスト 数値として振る舞う $value = @arg; @arg > 0; @arg + 1

配列は伸びたり、縮んだりする

@arg = (0,1,2); @arg = (0,1); #arg[2]は削除される $arg[5] = 5; @arg = (0,1); #$arg[0]と$arg[1]しか存在しなくなる。他は削除される。 @arg = (0,1); $arg[5] = 5; # @argの中身は # (0,1,undef,undef,undef,5)

変数の交換

変数aと変数bの値を交換したいとき、 ($a,$b) = ($b,$a); ということができます。 cのように中間変数を挟む必要はなくなります。

配列へのアクセス

@配列名 のような配列を作ると、次のような決まりになります。 $#配列名 には 最後の要素のインデックスが代入される。 @配列名を数値として扱うと配列の個数になる。#!/usr/bin/perl @arg = ("one","two","three","four","five"); print "$arg[$#arg]\n"; p…

スライス

スライスとは? 配列の一部を使ったリストのことを言います。 具体例 配列argの最初と2番目を交換 @arg[1,0] = @arg[0,1]; 配列argの偶数番目だけを取り出し、新配列に代入 @arg2 = @arg[0,2,4,6,8,10,12]; リストからもスライスができます。 @arg = (10,20,…

foreach ふぉーいーち

whileやforみたいな、繰り返しを行う制御文。 #!/usr/bin/perl @arg = 1..10; $sum = 0; $tmp = 0; foreach $tmp (@arg) { $sum += $tmp } print "$sum\n"; 結果 55 foreachの処理は 配列argの$arg[0]の値を$tmpにセットして、$sumに加えます。 以下等同様に…

命令die

die 引数 この命令は引数のメッセージを出力して、プログラムを終了します。

@ARGV

コマンドラインからプログラムに渡す引数は配列ARGVに代入されます。 ARGV とは argument(引数)のvalue(値)の略です。 $ ./test.pl 1 2 3 4 5 と引数を与えて、プログラムを実行すると、 $ARGV[0] = 1; $ARGV[1] = 2; $ARGV[2] = 3; $ARGV[3] = 4; $ARGV[4] …

eval命令

evalとは、evaluate(評価する)という英語の略。 eval(引数); の形式で使い、受け取った引数をPerlプログラムとして評価します。 1 #!/usr/bin/perl 2 3 print eval($ARGV[0])."\n"; 実行してみる $ chmod +x test.pl $ ./test.pl 1+2 3

前置演算子と後置演算子

前置演算子 int x = 1; int y = x++; // y=1 , x=2 後置演算子 int x = 1; int y = ++x; // y=2 , x=2 応用 int x = 2; int y = (x++) * (x + 3); このプログラムを実行するとxとyの値は x = 2; y = 12; となる。 (x++) は 2 と評価される。xの値は3に。 (x …

n回の繰り返し

for(i=0;i<n;i++) { ... } for(i=1;i<=n;i++) { ... } for(;n-->0;) { ... } for(;--n>=0;) { ... }</n;i++)>

無限ループ

while (true) { ... } for (;;) { ... |

break文

break; この命令を、while文やfor文などのループの中で使うとループの外へ抜け出すことができます。 実際には、ループを脱出する命令last - rderaログで書いたperlの命令lastのように無限ループを意図的に作り、その中でifによる条件文でループの外へ抜け出…

continue文

continue; このcontinue文が実行されると、ループ本体の残りの部分が飛ばされ、ループの末尾にプログラムの流れが移動します。 while (true) { ... if (条件文) continue; //.............................................. //ifの条件に当てはまり、contin…

コマンド base64

base64コマンドの使い方: UNIX/Linuxの部屋 base64方式のデコード、エンコードをするコマンド base64 inputfile outputfile -e エンコード -d デコード macだと、標準では組み込まれていないようなので、portでインストールする。 $ sudo port install base6…

コメントの挿入方法

javaでのコメントの記述方法は3種類あります。 /* コメント ..... ..... */ /** コメント ..... ..... */ // コメント

変数の初期化

初期化していない変数を使うと怒られます。 int x; System.out.println("x="+x); //エラー こんな感じで。 変数 x は初期化されていない可能性があります。 System.out.print("x="+x); ^ しっかり、初期化しましょう。 int x=0; ちなみに複数の変数をまとめ…

基本的なキーボードからの入力方法

import java.util.Scanner; class Test { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); int x = stdIn.nextInt(); System.out.println("x="+x); } } 変数xに標準入力から整数値を読み込み、標準出力に出力する。 実行…

基本型 (primitive tyep)

javaが標準で提供している型のことを基本型、または、プリミティブ(primitive)とか呼んだりするみたいです。 基本型には次の2つの型があります。 数値型 論理型 数値型 数値型は2つの型があります。 整数型 浮動小数点型 整数型 byte short char int long …

基本的な乱数の生成

1 import java.util.Random; 2 3 public class Test { 4 5 public static void main(String[] args) { 6 Random rand = new Random(); 7 System.out.println(rand.nextInt(100)); //0〜99の乱数を出力 8 } 9 10 } 以下のようにインスタンス化しているが、種…

演算子

関係演算子 成立すればtrue、そうでなければfalse x < y x > y x <= y x >= y 等価演算子 成立すればtrue、そうでなければfalse x == y x != y 論理補数演算子 xがtrueなら、false xがfalseなら、true !x 論理積演算子 xとyの両方ともtrueであればtrueを、そ…

switch文

判定のための制御式は整数型でなければならない。 switch (整数型) ラベル 制御式を評価が行われ、その結果が0だとすると、 case 0: に飛ぶ。 defaultラベル 制御式を評価した結果がどのcaseとも一致しないと、 default: に飛ぶ。 break文 break; break文を…

ブロック内でのみ利用する変数

ブロック内で宣言された変数は、ブロック内でしか利用できません。 if (a>b) { int tmp = b; b = a; a = tmp; } System.out.println("tmp="+tmp); //エラー 変数tmpはブロック内のしか使えない 実行してみると $ javac Test.java $ java Test シンボルを見つ…

文字列として比較する

perlは変数が数値として振る舞うこともできますし、文字列として振る舞うこともできます。 次のように変数を初期化し、数値として比較すると両方の変数は等しいです。 $a = "1"; $b = "01"; if ($a == $b) { //等しい ... } しかし、数値としてではなく、文…

真と偽

perlでは変数が数値としても、文字列としても振る舞うことは文字列として比較する - rderaログで述べたが、それに関連してperlでは何を真と決め、何を偽と決めているかについて学びます。perlでは数値の場合、0以外を真、0を偽としています。 つまり、 if (1…