Page Top

今回は… anchor.png

さて、今まではテキストな電卓程度のことしかプログラミングできませんでした。もっとプログラムらしいことをさせたいとは思いませんか?
ここで、もっと自由度を聞かせるために、「変数」についてのお話をしてみようと思います。
数学の変数について思うところのある方は、ぶっちゃけつまらない回なので次に急ぎましょう :-)

Page Top

今回のミソ anchor.png

  • 変数」とは変えられる数のこと
  • 数学で言えば x や y のこと
  • 値を入れる入れ物のようなもの
  • 変数と対象に、定まった数のことは「定数」という
Page Top

内容 anchor.png

変数とは、変えることができる数字って言う意味で、数学で言えば x や y にあたります。
これが使えるようになると、ぐんとできることの幅が広がります。
プログラミングのミソといってもいいかもしれません。

変数と言うのは、平たく言うと入れ物です。
入れ物の中に値を入れます。
この値は基本好きなときに見ることができます。
便利です。
今まで使ってきた数字とかは、 5 とか 7 とか、見るからに数字ですって言うようなものばかりでした。
これは、数学やプログラミングの世界では「定数」と言います。いわゆる定まった数字です。この数は変えることができません。プログラムがその場所を通った時点ではいつも同じように判断されます。

ここで、変数と言う概念を導入します。すると、今まではずっと同じだった数を変えることができるようになります。つまり、入れ物の中身をかえてやるんです。
数学の変数では

3x + 2

となっていた場合、 x が変数となっています。
また、 3 や 2 は定数となります。
上の場合では、 x が3なら

3 * 3 + 2 = 11

で、 11 という計算結果になります。
また、 x が 5 なら

3 * 5 + 2 = 17

となり、計算結果は 17 です。
このように、変数の中身をかえてやることができれば、同じ書き方で、違った値をもらうことができるようになります。

Page Top

まとめ anchor.png

今回は文章オンリーです。 次のも文章のみです。 つまらないですね。 でも、この概念はとても大切なものなのです。
次は、プログラムの中で変数を使うに当たって必要な知識「型」について説明していきます。
文章ばかりで暇かもしれませんが、お付き合いくださいな。

Page Top

#02 - プログラミングでの変数 anchor.png

Page Top

今回は… anchor.png

今回は、変数の型について説明します。
今まで、数値には「実数」や「整数」があり、また、「文字列」もあるなどといったことを解説しました。これは、プログラミングでは「型」と呼ばれています。
たとえばJavascriptやPerlなどといった言語には型は存在していません。大雑把にobjectやHASHなどといった区別はありますが、変数はすべて同じように扱うことができす。
しかし、D言語では、この変数の型は厳格に決められており、整数型には、整数しか格納できず、文字列型には文字列しか格納できません。
不便と思う人もいるかもしれませんが、D言語はそうなのです。あきらめましょう。
余談ですが、反対に型のない言語もあります。タイプルーズな言語とか呼ばれる言語です。先に紹介した、Javascript、Perlなんかですね。

Page Top

今回のミソ anchor.png

  • 型の対応は次のようになっています
    • 整数 … int
    • 実数 … real
    • 文字列 … char[]
Page Top

内容 anchor.png

う~ん、なんというか、今回のミソでほとんど今回の内容完璧に物語っているような気もしますが…
一応補足です。

整数型の変数を定義するには、 int というものを使います。
実数では real で、
文字列は char[] です。
実数な変数 x を定義したければ、次のようにします
real x; まぁ、詳しくは次回のプログラムを見ればわかると思います。

Page Top

まとめ anchor.png

次回は、実際のプログラムを通して変数のありがたさを実感してみようかと思います。
やる内容は、「円の面積」を「半径」から求めるプログラムです。
数学の内容で行けば、

S = πr2

ですね。
S が円の面積をあらわす変数、
πは円周率を表す定数
r は円の半径をあらわす変数
と言う風になっています。

では、それを踏まえたうえで、お次へどうぞ~。

Page Top

#03 - 変数の使い方 anchor.png

Page Top

今回は… anchor.png

変数を使ってようやっとプログラムを組んで見ます。
でもまあ、今回は一応使ってみる程度で、変数を使わなくても同じようなことが一応できるのですが…とりあえず…ね。

Page Top

今回のミソ anchor.png

  • = は、数学的な「左辺と右辺は等しい」という意味ではなく、「右辺の値を左辺の変数に代入する」という意味。
  • 変数の定義の仕方は…
    型 変数名; // で変数の定義
    
  • 変数に値を代入するには…
    変数 = 値; // で変数に値を代入
    
  • 型 変数名 = 初期値; // で変数の定義+変数の初期化
  • 変数には型ごとに初期値が決まっている
  • int型の初期値は 0
  • 文字列を代入するときは.dupでコピーしたものを代入する。(なぜこうするかは今はおまじない。)
  • 一応初期値はあるけれど、期待通りの動作をさせたいならとりあえず初期化しましょう。
Page Top

サンプルコード anchor.png

filesample0303p.d
Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
 
 
-
!
-
-
|
!
-
|
!
|
-
|
|
!
|
-
|
|
|
|
|
|
!
|
|
!
// おまじない
import std.stdio;
 
// おまじない
int main(char[][] args)
{
    // 半径用の変数 r を定義します。
    // ここでは、あらかじめ数値として半径を定義しておきます。
    real r;
    // そして、変数へ値を代入。
    // 他の半径で円の面積を調べたかったらここの数値を変えればいいのです。
    r = 10;
    
    // πも同様に変数としましょう。
    // 型 変数 = 定数;
    // とすることで、変数の定義と初期化を同時に行うことができます。
    real pi = 3.14159;
    
    // そして、出力の段階で円の面積を計算。
    // 仮に半径を変えたくなったとして、値を修正しようと思ったときに
    // もし、ここにたどりつくまでがものすごく長いプログラムだったとしても、
    // いちいちすべての r を返る必要はなく、常に一番最初に r = 10; としてある
    // 箇所を修正すればよいのです。
    // ちなみに、円の面積は
    // S = 2 * π * r * r
    writeln(2 * pi * r * r);
    
    return 0;
}
+  Tango用はこちら
filesample0303t.d
Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
 
 
-
!
-
-
|
!
-
|
!
|
-
|
|
!
|
-
|
|
|
|
|
|
!
|
|
!
// おまじない
import tango.io.Stdout;
 
// おまじない
int main(char[][] args)
{
    // 半径用の変数 r を定義します。
    // ここでは、あらかじめ数値として半径を定義しておきます。
    real r;
    // そして、変数へ値を代入。
    // 他の半径で円の面積を調べたかったらここの数値を変えればいいのです。
    r = 10;
    
    // πも同様に変数としましょう。
    // 型 変数 = 定数;
    // とすることで、変数の定義と初期化を同時に行うことができます。
    real pi = 3.14159;
    
    // そして、出力の段階で円の面積を計算。
    // 仮に半径を変えたくなったとして、値を修正しようと思ったときに
    // もし、ここにたどりつくまでがものすごく長いプログラムだったとしても、
    // いちいちすべての r を返る必要はなく、常に一番最初に r = 10; としてある
    // 箇所を修正すればよいのです。
    // ちなみに、円の面積は
    // S = 2 * π * r * r
    Stdout(2 * pi * r * r).newline;
    
    return 0;
}
Page Top

実行結果 anchor.png

1
2
$ dmd -run sample0303p.d
628.318
Page Top

まとめ anchor.png

というわけで、今回は変数を使って出力をしてみました。
今回のこと程度では前回の計算とあわせて電卓が多少楽になった程度でしょう。
次章ではこの変数を使って、入力するといったことをやっていこうと思います。

とりあえず今回は以上でーす。
お次へどうぞー

Page Top

#04 - 変数を使いこなす anchor.png

Page Top

今回は… anchor.png

前回の内容で、変数の定義の仕方と使い方を学びました。
今回は、それを発展させて様々なパターンに応用したものを示します。

Page Top

今回のミソ anchor.png

  • 数値や文字列など、さまざまなものに変数を使用することができる。
Page Top

サンプルコード anchor.png

filesample0304p.d
Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
 
 
-
!
-
-
!
|
-
!
|
-
!
|
|
-
!
|
-
!
|
|
-
!
-
!
|
-
|
!
|
-
!
|
-
!
|
-
!
-
!
|
-
|
!
-
!
|
-
!
-
!
|
-
!
!
// おまじない
import std.stdio;
 
// おまじない
int main(char[][] args)
{
    // int型(整数型)の変数 a の定義
    int a;
    
    // a に 10を代入。
    a = 10;
    
    // writef で出力すると、10と表示されることがわかる。
    writeln(a);
    
    
    // real型(実数型)の変数 b の定義+初期化
    real b = 3.5;
    
    // writef で出力すると、3.5と表示されることがわかる。
    writeln(b);
    
    
    // 変数 b に別の数値を割り当てることもできる。
    b = 1.8;
    // 1.8と表示される。
    writeln(b);
    
    // 変数 b に b を使って新しい数値を代入する
    // この例では 1.8 + 2.5 なので b の値は 4.3 ということになる
    b = b + 2.5;
    
    // 文字列の変数は、次のように定義。
    char[] c;
    
    // 文字列を代入
    c = "文字列の代入".dup;
    
    // 出力。「文字列の代入」と表示される
    writeln(c);
    // 書式も使える。
    writefln("%s+書式で出力", c);
    
    // 文字列を、ほかの文字列とつなげる。
    // c は「文字列の代入+文字列の連結」になる。
    c = c ~ "+文字列の連結";
    // 出力
    writefln(c);
    
    // 整数の初期値は 0
    int d;
    // 0と表示されます。
    writeln(d);
    
    // おまじない
    return 0;
}
+  Tango用はこちら
filesample0304t.d
Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
 
 
-
!
-
-
!
|
-
!
|
-
!
|
|
-
!
|
-
!
|
|
-
!
-
!
|
-
|
!
|
-
!
|
-
!
|
-
!
-
!
|
-
|
!
-
!
|
-
!
-
!
|
-
!
!
// おまじない
import tango.io.Stdout;
 
// おまじない
int main(char[][] args)
{
    // int型(整数型)の変数 a の定義
    int a;
    
    // a に 10を代入。
    a = 10;
    
    // writef で出力すると、10と表示されることがわかる。
    Stdout(a).newline;
    
    
    // real型(実数型)の変数 b の定義+初期化
    real b = 3.5;
    
    // writef で出力すると、3.5と表示されることがわかる。
    Stdout(b).newline;
    
    
    // 変数 b に別の数値を割り当てることもできる。
    b = 1.8;
    // 1.8と表示される。
    Stdout(b).newline;
    
    // 変数 b に b を使って新しい数値を代入する
    // この例では 1.8 + 2.5 なので b の値は 4.3 ということになる
    b = b + 2.5;
    
    // 文字列の変数は、次のように定義。
    char[] c;
    
    // 文字列を代入
    c = "文字列の代入".dup;
    
    // 出力。「文字列の代入」と表示される
    Stdout(c).newline;
    // 書式も使える。
    Stdout.formatln("{}+書式で出力", c);
    
    // 文字列を、ほかの文字列とつなげる。
    // c は「文字列の代入+文字列の連結」になる。
    c = c ~ "+文字列の連結";
    // 出力
    Stdout(c).newline;
    
    // 整数の初期値は 0
    int d;
    // 0と表示されます。
    Stdout(d).newline;
    
    // おまじない
    return 0;
}
Page Top

実行結果 anchor.png

1
2
3
4
5
6
7
8
$ dmd -run sample0304p.d
10
3.500000
1.800000
文字列の代入
文字列の代入+書式で出力
文字列の代入+文字列の連結
0
Page Top

まとめ anchor.png

今回は前回の内容を掘り下げて、さまざまな型やパターンで変数を取り扱いました。
特に以下のようなパターンは理解が難しいかと思いますので、いろいろ試しながら理解を深めていってください。

// 新しい変数 b を1.8として定義
real b = 1.8;
// 現時点で b は 1.8
// b に、新しい値として b(1.8) + 2.5 の結果である 4.3 を代入する。
b = b + 2.5;
// 現時点で b は 4.3
// b に、新しい値として b(4.3) * b(4.3) + b(4.3) の結果である 22.79 を代入する
b = b * b + b;
// 現時点で b は 22.79

とりあえず今回はこれで終わりでーす。

お次へどうぞー

Page Top

#summary - まとめ anchor.png

Page Top

第03章のミソ anchor.png

  • 変数」とは変えられる数のこと
  • 数学で言えば x や y のこと
  • 値を入れる入れ物のようなもの
  • 変数と対象に、定まった数のことは「定数」という
  • 型の対応は次のようになっています
    • 整数 … int
    • 実数 … real
    • 文字列 … char[]
  • = は、数学的な「左辺と右辺は等しい」という意味ではなく、「右辺の値を左辺の変数に代入する」という意味。
  • 変数の定義の仕方は…
    型 変数名; // で変数の定義
    
  • 変数に値を代入するには…
    変数 = 値; // で変数に値を代入
    
  • 型 変数名 = 初期値; // で変数の定義+変数の初期化
  • 変数には型ごとに初期値が決まっている
  • int型の初期値は 0
  • 文字列を代入するときは.dupでコピーしたものを代入する。(なぜこうするかは今はおまじない。)
  • 一応初期値はあるけれど、期待通りの動作をさせたいならとりあえず初期化しましょう。
  • 数値や文字列など、さまざまなものに変数を使用することができる。
Page Top

宿題 anchor.png

変数を使って、一辺5の立方体の底面積と体積を求めてみましょう。
以下のような結果が得られるはずです。

1
2
底面積 : 25
体積 : 125
Page Top

コメント anchor.png

さてさて、できましたかな~?
とりあえず、変数はとてもよく使うので、変数の何たるかはどうでもいいとしても、使い方は覚えておきましょう。
そんなわけで、宿題できたら、あるいは予想ついたら次にいきましょう~


Page Top

投票とコメント anchor.png

Choices Vote
大変参考になった1  
参考になった0  
あまり参考にならなかった0  
まったく参考にならなかった0  

Show recent 10 comments. Go to the comment page.

  • #02 - プログラミングでの変数 の冒頭、「今回は、変数の方について説明します。」は変数の『型』が正解? -- ゲストEdit 2009-04-21 (火) 14:21:54
  • それで正解です。誤字でした。申し訳ありません。 -- SHOOEdit 2009-04-21 (火) 16:59:06
  • S = 2πr2 -- ゲストEdit 2010-02-19 (金) 01:57:26
  • S = 2πr2・・・・・・えっ -- ゲストEdit 2010-02-19 (金) 01:57:44
  • ぶはは、πr2ですねw 過去の俺死ねwww -- SHOOEdit 2010-02-20 (土) 20:46:26
  • #03のまとめ、「編集を使って」は「変数を使って」の誤字ですかね。 -- ゲストEdit 2014-02-16 (日) 20:18:02
Name:

Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 3512, today: 1, yesterday: 1
Princeps date: 2010-02-20 (Sat) 20:47:26
Last-modified: 2014-02-18 (Tue) 20:16:59 (JST) (2446d) by SHOO
メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu