Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第二章を加筆しました #1

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions docs/chapter1/wandbox.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,17 @@ print "Hello, world!\n";
- ヒント
- 文字列を出力する関数は`print`です
- 文字列は`"`で囲みます

### コラム 2017年までのお約束

昨年までのPerl入学式ではお約束として**3点セット**を受講生の皆さんにお伝えてしていました。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

あくまで2018年の資料を作っているので, 去年までの内容に触れる必要はないと思いました. どういう意図がありますか?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wanbok以外の環境で資料として使用する場合がある事を想定しています。
教科書的に触れておく(講義では触れないで利用する)と良いかなと考えています

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

それであれば, 2017年までのお約束 というタイトルは不適切かなと思いました.

Wanbok以外の環境で資料として使用する場合

ということを想定したタイトルになっていた方がわかりやすそうです.


```perl
#!/usr/bin/env perl
use strict;
use warnings;
```

この1番上の行は「シェバング (shebang)」または「シェバン」などと呼ばれるものです。
これは実際にプログラムを実行するOSが「このプログラムは `#!/usr/bin/env` に設定されている`perl` を実行するんだな」と解釈する為に必要となっています。
今年のPerl入学式ではWanboxを利用して行いますのでシェバングは必要となっておりませんが、ご自身でPerlプログラムを書く際は3点セットを忘れずに付けてみましょう。
66 changes: 57 additions & 9 deletions docs/chapter2/numeric_and_string.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

## Perlにおける数値

...
PerlではCやPythonの用に**データ型の様なものが存在しません**。
つまりPerlではある数を数値として使いたい時は数値として、文字列として使いたい場合は文字列として解釈されます。
例えば`$number = 10;`として「 `10 + $number` 」として使う場合は数値ですが、「 `print "This is a $number\n";`」として利用する場合は文字列として解釈されます。


この性質をPerlでは**コンテキスト**と呼び、以降様々なコンテキストが出現します。
先程の文字列としての解釈は「文字列コンテキスト (string context)」、数値としての解釈は「数値コンテキスト (numeric context)」などと呼ばれます。

### 数値への演算子

Expand All @@ -15,12 +21,12 @@ use warnings;

my $foo = 4;
my $bar = 2;
my sum = $foo + $bar; # 4 + 2 = 6
my sub = $foo - $bar; # 4 - 2 = 2
my mul = $foo * $bar; # 4 * 2 = 8
my div = $foo / $bar; # 4 / 2 = 2
my mod = $foo % $bar; # 4 % 2 = 0
my exp = $foo ** $bar; # 4の2乗は 16
my $sum = $foo + $bar; # 4 + 2 = 6
my $sub = $foo - $bar; # 4 - 2 = 2
my $mul = $foo * $bar; # 4 * 2 = 8
my $div = $foo / $bar; # 4 / 2 = 2
my $mod = $foo % $bar; # 4 % 2 = 0
my $exp = $foo ** $bar; # 4の2乗は 16
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

サッとマージするとも限らないので, この辺りの誤字修正系は別のPull Requestで切り出してもらえると良さそうでした.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほどです

```

このコードでは, 2つの変数`$foo`と`$bar`に数値を代入し, それらを使って`+`演算子で加算(足し算), `-`演算子で減算(引き算), `*`演算子で乗算(掛け算), `/`で除算(割り算), `%`演算子で剰余(左辺を右辺で割った余り), `**`演算子で冪乗(べき乗, 左辺の数値の右辺の数値乗)を計算しています.
Expand All @@ -40,6 +46,20 @@ my $div = 1 / 0;
Illegal division by zero at prog.pl line 4.
```

### 数値への演算子(省略記法)

先程の様な計算はプログラミングをする上で多く利用する為,省略記法を用いる事ができます.

```perl
my $fuga = 100;
my $hoge = 50;

$fuga += 1; # $fuga = $fuga + 1;と同じ
$fuga -= 1; # $fuga = $fuga - 1;と同じ
$fuga *= 2; # $fuga = $fuga * 2;と同じ
$fuga /= $hoge; # $fuga = $fuga / $hoge;と同じ
```
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

省略記法はそれこそ省略して良さそうと思っています. $fuga = $fuga + 1 などで代替できるので.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

確かに入門では突飛感があるので無くしてもいいかなとは思っていたのですが、教科書的に使うなら一応書いておいても良いかななどと思っています。(入門向けのProgateというサイト代入をした後のフェーズで触れられています)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Progateが触れているのでPerl入学式でも触れる, だとちょっと説得力が弱い気がします.
例えばカリキュラムを終了した後のappendix的な資料で触れるなどの手もありそうです.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほどです。一旦削除してみます


### インクリメント / デクリメント

```perl
Expand All @@ -58,10 +78,17 @@ print $foo; # => 4
変数に格納された数値を, 1ずつ増やしたい/減らしたいときは, インクリメント/デクリメントという演算子を利用することができます.
(1)のように, 変数の後ろにインクリメント演算子(`++`)を書くと, その変数に格納された数値が1増えます.
同様に, (2)のように, 変数の後ろにデクリメント演算子(`--`)を書くと, その変数に格納された数値が1減ります.
また、1ずつ増やす事をインクリメント,減らす事をデクリメントと呼びます.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここで唐突に説明すると違和感がありました. そもそもインクリメント/デクリメントについては, 上の 変数に格納された数値を, 1ずつ増やしたい/減らしたいときは, インクリメント/デクリメントという演算子を利用することができます. で説明できていそうです.

変数に格納された数値を, 1ずつ増やしたい(インクリメント)/減らしたい(デクリメント)ときは, それぞれインクリメント演算子++とデクリメント演算子--という演算子を利用することができます.

あたりがよさそう?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

すっきりして良さそうですね!ありがとうございます!


## Perlにおける文字列

...
文字列とは数値とは別の**文字の並び**です。例えば「`"Perl"` 」や 「`"Perl入学式"` 」などが該当します。
プログラミングをしていく上で文字列を利用したくなることがあるでしょう。
Perlでは他の言語と同じくシングルクォート(`'`)かダブルクォート(`"`)で文字を囲むと「文字列リテラル」と解釈され、文字列として利用できます。
この文字列リテラルはスカラー変数(`$`から始まる変数)代入する事が可能です。

print文など「文字列コンテキスト」で評価をさせる場合ほとんどの変数がPerl側で文字列として解釈されます。


### 数値への演算子

Expand Down Expand Up @@ -179,7 +206,28 @@ print "Last year it was " . $last_year . ". Now it is " . $now . "\n";

最後に, 改めて代入演算子について触れておきます.

...
代入演算子 `=` は **右辺を左辺に代入する** 演算子です。
その為右辺で同じ値を利用することが可能です。

```perl
$num = 30;
$num = $num + $num;
```

そして代入演算子は省略することが可能です。

```perl
$num = 30;
$num *= 30;
```

では、次の結果は何になるでしょうか。考えてみましょう。

```perl
$num = 3;
$num = $num * 30;
$num /= 10;
```

## 練習問題 2-3

Expand Down