diff --git a/JDchokai-explain.html b/JDchokai-explain.html deleted file mode 100644 index a56c4ca..0000000 --- a/JDchokai-explain.html +++ /dev/null @@ -1,974 +0,0 @@ - - - - -JD説明シート - - - -

(0) 基礎内容

-

[1]キーボードについて

-

キーボードの配置は主に以下の通りである。

-キーボード -

赤丸で囲まれている部分を【コントロール】といい、プログラムの操作をする上で大事なキーとなるため必ず覚えておく。他にも、【shift(シフト)】というキーもよく使うものであるので必ず覚えておくこと。コントロールを押しながら別のキーを押す、シフトを押しながら別のキーを押すというように別のキーと組み合わせて使うので、その組み合わせをしっかり記憶しておくことでプログラムを書く際にスムーズに進めることが出来る。このJD説明書と別冊の教科書ではコントロールを押しながら、1を押すことを【C-1】と記載する。【C-●】と出てきたら、それはコントロールを押しながら●のキーを押す操作である。

-
- -
- -

[2]画面の操作について

-

emacs

-

【C-1】と入力することで、emacs(いーまっくす)というタブを選択することが出来る。このタブを使ってプログラムを作成することが出来る。もしemacsというタブを選択することが出来ない場合、何もない場所を左クリックしてメニューを表示し、上にあるemacsを選んで新しくタブを出す。

-emacs -

kterm

-

【C-2】と入力することで、kterm(けーたーむ)というタブを選択することが出来る。このタブを使ってプログラムを実行したり、作ったプログラムを確認したり出来る。もしktermというタブを選択することが出来ない場合、何もない場所を右クリックしてメニューを表示し、上にあるktermを選んで新しくタブを出す。

-kterm -
- -
- -

[3]プログラムの基本的なルール

-

プログラムは上から1行づつ書いていき、上から順に実行されていく。途中から・下からは実行はされない。プログラムは1文字でもおかしい部分があると動いてはくれないため、誤字脱字などに気をつける。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-print("こんにちは!")
-print("JD 鳥海塾の〇〇〇〇です。\n")
-
-
-こんにちは!
-JD 鳥海塾の〇〇〇〇です。
-
-

プログラムは必ず保存してから実行する。保存を行うときには【C-x】【C-s】保存が出来ると、左下にある**のマークが--に変わる。**が保存できていないという証で、ーーが保存完了の証。

-
- -
- -

[4]プログラムファイルの作り方

-

プログラムファイルを作るためにはemacs上で【C-x】【C-f】を入力する。すると下の部分に青文字で Find file: ~/ というテキストが出てくる。

-
-Find file: ~/
-
-

そこに続けて Ruby/my1.rb と入力することでmy1.rbというプログラムファイルを作成することが出来る。my1 の部分は自分の好きな名前を入れる事が出来る。 kudamono.rb yasai.rb keisan.rb などである。作成できると何も書いていない真っ白なページが出来るので、そこにプログラムを書くことが出来る。書き終わったら保存を忘れないこと。

-
-Find file: ~/Ruby/my1.rb #my1.rbは自分が分かりやすい名前にしておく
-
-
- -
- -

(1) 変数

-

[1]変数について

-

変数とは「値」を入れておく「箱」のようなもので、事前に「値」を格納しておき、後で簡単に取り出せるようにできる。

-

変数を用意するにはプログラムにはこのように書く。

-
-apple = #appleという名前をつけた「変数」を用意
-
-

この記述だけで「apple」という「変数」を作ることが出来る。では早速この変数に値を格納する。

-
-apple = 3 #「変数」に3を格納
-
-これでappleという「変数」に3という「値」を格納することが出来た。この格納する動きのことを代入と表現する。変数を利用して計算のプログラムを作成する。 -
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-apple = 3 #appleという「変数」に「3」を代入
-print(appel + 17) #appleには「3」が格納されているので、3 + 17 になる
-
-
-20
-
- -

[2]変数のルール

-

変数には自分の好きな名前をつけることが出来るが、使える文字は英数字とアンダースコア(_)のみで、最初の文字は英語の小文字でなければならない

-変数のルール -

上記のルールを守った上で複数の変数を使用したプログラムを作成する。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-apple = 3
-orange = 5
-japan = 2
-google_earth = apple + orange + japan #3つの変数の値の合計をgoogle_earthに代入する
-print(google_earth)
-
-
-10
-
-
- -
- -

(2)値

-

[1]値について

-

プログラム内において、値とはプログラムの処理の対象になるデータのこと。

-

これについてはプログラムを確認しながら説明していく。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-print(1 + 2)
-
-
-3
-
-

このプログラムはただ「1+2」を行い「3」を出力しただけのプログラムであるが、この動き自体が実は凄いことをしている。

-

このプログラムには「3」という文字は一切書かれていない。それにも関わらず、プログラムは「1」と「2」という数字を対象として、「足し算という処理」を行い、「3」を導き出している。

-

今回のプログラムの「1」と「2」のように「処理の対処になるもの」のことを「値」と呼ぶ。

-
- -
- -

[2]値の形

-

日本語にひらがなとカタカナがあるように、値にも様々な種類がある。

-

その中で代表的なのか「数値」と「文字列」である。

-

数値

-

数値とは「1」や「3.5」のような整数や少数のことを意味する。足し算・引き算、掛け算などの計算をするときなどに使える。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-number1 = 3 #「数値」の3
-number2 = 5 #「数値」の5
-sum = number1 + number2
-print(sum)
-
-
-8 「数値」の3と「数値」の5の足し算になるのでそのまま計算し、「数値」の8という結果になる。
-
-

文字列

-

文字列とは複数の文字が組み合わさったもの。"(ダブルクオーテーション)で囲んで表現する。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-number1 = "3" #「文字列」の3
-number2 = "5" #「文字列」の5
-sum = number1 + number2 #「文字列」の5と「文字列」の3の足し算
-print(sum)
-
-
-35 「文字列」の3と「文字列」の5の足し算になるのでそのまま連結し、「文字列」35という結果になる。
-
-

どちらも3と5の足し算であるが、結果がこんなにも違ってくる。値の形を間違えてプログラムにエラーが起こることが多いので、十分注意する。

-
- -
- -

(3)入出力処理

-

[1]gets

-

getsとはキーボードからの入力を読み込むもの。人間が打ち込む値で、必ず文字列となる。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-print("入力をおねがいします。\n")
-number1 = gets #キーボードに打ち込んだ値をnumber1に代入
-number2 = "さようなら"
-print("表示します。\n")
-print(number1)
-print(number2)
-
-
-入力をおねがいします。
-こんにちは[Enter] 入力待ちになるので「こんにちは」とキーボードで入力しEnterキーを押す
-表示します。
-こんにちは
-さようなら
-
-

「入力をおねがいします。」と表示された後にユーザーの入力待ちになる。ここで「こんにちは」と入力し、その文字列がnumber1という変数に代入され、そのままプログラムは進行し、結果が表示される。getsを使うとプログラムを動かした後で自由に変数の中身を変更できる。

-

.chomp

-

getsには打ち込んだ値の後ろに必ず「改行文字」が入力されている。改行文字とは改行の指示を出す文字のことである。「\n」と書く。

-

getsに.chompをつけて改行文字を切り取ることが出来る。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-print("入力をおねがいします。\n")
-number1 = gets.chomp #キーボードに打ち込んだ値をnumber1に代入
-number2 = "さようなら"
-print("表示します。\n")
-print(number1)
-print(number2)
-
-
-入力をおねがいします。
-こんにちは[Enter] 入力待ちになるので「こんにちは」とキーボードで入力しEnterキーを押す
-表示します。
-こんにちはさようなら 改行行文字を切り取ったので改行されずに並んで表示される
-
-

改行文字を切り取ったため、「こんにちは」の後ろで改行されずに次の結果が表示されている。

-

.to_i

-

getsで打ち込んだ値は必ず文字列であるが、「.to_i」を後ろにつけることで整数に変換できる。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-print("入力をおねがいします。\n")
-number1 = gets.chomp.to_i #キーボードに打ち込んだ値をnumber1に代入
-number2 = gets.chomp.to_i #キーボードに打ち込んだ値をnumber2に代入
-print("表示します。\n")
-print(number1 + number2)
-
-
-入力をおねがいします。
-3[Enter] 入力待ちになるので「3」とキーボードで入力しEnterキーを押す
-4[Enter] 入力待ちになるので「4」とキーボードで入力しEnterキーを押す
-表示します。
-7 整数に変換されているので計算が出来る。
-
-

文字列のままでは計算が出来ないが、整数に変換されているので「3 + 4」の計算が可能となり、結果は7が表示される。

-

.to_f

-

こちらはto_iと違い、少数に変換することのできるもの。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-print("入力をおねがいします。\n")
-number1 = gets.chomp.to_f #キーボードに打ち込んだ値をnumber1に代入
-number2 = gets.chomp.to_f #キーボードに打ち込んだ値をnumber2に代入
-print("表示します。\n")
-print(number1 + number2)
-
-
-入力をおねがいします。
-3.5[Enter] 入力待ちになるので「3.5」とキーボードで入力しEnterキーを押す
-4.2[Enter] 入力待ちになるので「4.2」とキーボードで入力しEnterキーを押す
-表示します。
-7.7 少数に変換されているので計算が出来る。
-
-

少数も扱えるようになり、「3.5 + 4.2」の計算が可能となり、結果は7.7が表示される。

-
- -
-

[2]printf

-

指定した値と組み合わせて文章を出力することのできるもの。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-name = "さとうたろう"
-number1 = 15
-number2 = 1.7
-
-printf("私の名前は%sです。\n",name) #組み合わせたい値が文字列のときは%sを使う
-printf("年齢は%d歳です。\n",number1) #組み合わせたい値が整数のときは%dを使う
-printf("身長は%fメートルです。\n",number2) #組み合わせたい値が少数のときは%fを使う
-
-
-私の名前はさとうたろうです。
-年齢は15歳です。
-身長は1.700000メートルです。
-
-

変数の中身を使って文章を作成することが出来る。これを使えば名前をユーザーに入力させてそれを表示するプログラムも作ることが出来る。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-name = gets.chomp
-
-printf("私の名前は%sです。\n",name) #組み合わせたい値が文字列のときは%sを使う
-
-
-さとうたろう[Enter] 入力待ちになるので「さとうたろう」とキーボードで入力しEnterキーを押す
-私の名前はさとうたろうです。
-
-
- -
- -

(4)制御構造

-

[1]if

-

ifはプログラムに分かれ道を作ることができる。「もしも○○であるならば、△△の処理を行う」というような動きをつけられる。

-

if文を書き始める場合には、最初に「if」「end」を記述する。

-
-if
-  この中に特定の動きをするプログラムを書く
-end
-
-

その後はどんな条件の時に「if」「end」の間に記述した動きをするか決める。今回はnumberが「数値の1」の時という条件をつける。

-

-if number == 1
-  この中に特定の動きをするプログラムを書く
-end
-
-

最後にどんな動きをするのかを記述する。

-
-if number == 1
-  print("ありがとう")
-end
-
-

今回は「ありがとう」と出力する動きを記述した。これで、「もしもnumberが数値の1であるならば、「ありがとう」と出力する処理を行う」という動きを作成することが出来た。

-

ここからもう1手順加える。

-
-if number == 1
-  print("ありがとう")
-else
-  この中に特定の動きをするプログラムを書く
-end
-
-

elseは、指定した条件が合わない時の処理を作成することが出来る。今回の場合は、「もしもnumberが数値の1以外であるならば、△△の処理を行う」という条件を作ることが出来る。

-
-if number == 1
-  print("ありがとう")
-else
-  print("ごめんなさい")
-end
-
-

これで、「もしもnumberが数値の1であるならば、「ありがとう」と出力する処理を行う」、「もしもnumberが数値の1以外であるならば、「ごめんなさい」と出力する処理を行う」という動きを作成することが出来た。

-

では、動かしてみる。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-print("数字を入力してください。\n")
-number = gets.chomp.to_i
-
-if number == 1
-  print("ありがとう")
-else
-  print("ごめんなさい")
-end
-
-
-数値を入力してください。
-1[Enter]
-ありがとう
-
-
-数値を入力してください。
-6739[Enter]
-ごめんなさい
-
-

これで1を入力するとありがとう、1以外を入力するとごめんなさいを出力するプログラムを作成することが出来た。

-

最後にここで、もう1つ動きを加えてみる。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-print("数字を入力してください。\n")
-number = gets.chomp.to_i
-
-if number == 1
-  print("ありがとう")
-elsif number == 2 #追加した部分
-  print("どういたしまして") #追加した部分
-else
-  print("ごめんなさい")
-end
-
-
-数値を入力してください。
-1[Enter]
-ありがとう
-
-
-数値を入力してください。
-2[Enter]
-どういたしまして
-
-
-数値を入力してください。
-846[Enter]
-ごめんなさい
-
-

elsifは、「もしも○○であるならば、△△の処理を行う」という処理を追加することが出来る。

-

これでこのプログラムは、「もしもnumberが数値の1であるならば、「ありがとう」と出力する処理を行う」、「もしもnumberが数値の2であるならば、「どういたしまして」と出力する処理を行う」、「もしもnumberが数値の1と2以外であるならば、「ごめんなさい」と出力する処理を行う」という動きをするようになった。

-
- -
- -

[2]while

-

whileは「条件〇〇が正しいとき、△△を繰り返す処理を行う」という繰り返しの処理を行うときに使う。何度も繰り返すことをループという

-

while文を書き始める場合には、最初に「while」「end」を記述する。

-
-while
-  この中に特定の動きをするプログラムを書く
-end
-
-

その後はどんな条件の時に「while」「end」の間に記述した動きをループさせるか決める。今回はnumberが「数値の5」以下の時はループさせ続けるという条件をつける。

-

-while number < 5
-  この中に特定の動きをするプログラムを書く
-end
-
-

最後にどんな動きをするのかを記述する。

-
-while number < 5
-  print("ありがとう\n")
-  number -= 1
-end
-
-

これで「number < 5 が正しいとき、ありがとうを出力し、numberの値を1増やす動きを繰り返す処理を行う」というプログラムが作成できた。

-

では、動かしてみる。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-number = 0
-
-while number < 5
-  print("ありがとう\n")
-  number += 1
-end
-
-
-ありがとう 
-ありがとう 
-ありがとう 
-ありがとう 
-ありがとう この回の繰り返しでnumbreは5になり、次の繰り返しの時に条件を満たしていないので繰り返しは終了する。
-
-

1回の繰り返しごとにnumberに1づつ代入され、numberが5になったので6回目の繰り返しが条件を満たせず終了した。

-

break

-

繰り返しの実行を中止し、繰り返しから抜けることができる。

-

今回はif文と組み合わせて作成する。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-number = 0
-sum = 0
-print("テストの合計点を計算しましょう。\n")
-
-while true #繰り返しの条件を「true」とすることで永遠にループさせることが出来る。
-  print("テストの点数を入力してください\n")
-  test = gets.chomp.to_i
-  if test == 0 #もしもtestが0であるならば
-    break #繰り返しの実行を中止し、繰り返しから抜ける
-  end #if文のend
-  printf("%d点\n",test)
-  sum += test
-  number += 1
-end #while文のend
-printf("あなたの%d回分のテストの合計得点は%d点です。\n", number, sum)
-
-
-テストの合計点を計算しましょう。
-テストの点数を入力してください。
-80[Enter]
-80点
-テストの点数を入力してください。
-75[Enter]
-75点
-テストの点数を入力してください。
-70[Enter]
-70点
-テストの点数を入力してください。
-0[Enter]
-あなたの3回分のテストの合計点は225点です。
-
-

このプログラムは、キーボードで点数を打ち込み、テストの合計点数を計算するプログラムである。

-

繰り返しの条件を「true」とすることで、whileの中を永遠に繰り返し続ける処理を書くことが出来る。このような場合にbreakは役に立つ。10・11・12行目のif文に注目してもらいたい。

-
-if test == 0
-  break
-end
-
-

このif文で「もしもtestが0であるならば、繰り返しの実行を中止し、繰り返しから抜ける処理を行う」という動きを作成している。

-

こうすることで、ユーザーの好きなタイミングで繰り返しを抜けさせることもできるようになる。

-

制御構造を1度に2つも使用しているため、endも2つ出てきている。混乱しないように、「if」と「while」を書くときは、最初に「end」とセットで書くように心がける。

-

redo

-

その繰り返しを無効化し、その繰り返しの先頭からやりなおす事が出来る。

-

先程のテストの点数の合計を出すプログラムに、点数を打ち間違えた時にやり直せる機能をredoを使って作成する。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-number = 0
-sum = 0
-print("テストの合計点を計算しましょう。\n")
-
-while true 
-  print("テストの点数を入力してください。\n")
-  test = gets.chomp.to_i
-  if test == 0
-    break
-  end #breakのif文用のend
-  printf("%d点\n",test)
-  print("間違いありませんか? 訂正したければno,問題なければno以外を入力してください。\n") #確認用のテキストを追加
-  choose = gets.chomp #chooseにキーボードで入力したものを代入
-  if choose == "no" #もしもchooseがnoであるならば
-    print("今の入力をなかったことにします。\n")
-    redo #この繰り返しを無効化し、この繰り返しの先頭からやりなおす
-  else #もしもchooseがno以外であるならば
-  sum += test
-  number += 1
-  end #redoのif文用のend
-end #while文用のend
-printf("あなたの%d回分のテストの合計得点は%d点です。\n", number, sum)
-
-
-テストの合計点を計算しましょう。
-テストの点数を入力してください。
-80[Enter]
-80点
-間違いありませんか? 訂正したければno,問題なければno以外を入力してください。
-yes[Enter]
-テストの点数を入力してください。
-75[Enter]
-75点
-間違いありませんか? 訂正したければno,問題なければno以外を入力してください。
-no[Enter]
-今の入力をなかったことにします。
-テストの点数を入力してください。
-70[Enter]
-70点
-間違いありませんか? 訂正したければno,問題なければno以外を入力してください。
-はい[Enter]
-テストの点数を入力してください。
-0[Enter]
-あなたの2回分のテストの合計点は150点です。
-
-

大きな追加部分は17行目〜23行目の部分

-
-if choose == "no"
-  print("今の入力をなかったことにします。\n")
-  redo
-else
-sum += test
-number += 1
-end
-
-

このif文で「もしもchooseがnoであるならば、この繰り返しを無効化し、この繰り返しの先頭からやりなおす」,「もしもchooseがno以外であるならば、sumに入力したテストの点数を加算し、numberを1増やす」という動きを作成している。

-
- -
- -

(5)配列

-

[1]配列とは

-

配列とは、データをたくさん詰めることの出来る引き出しのようなもので、複数の値をひとまとめにすることが出来る。

-
-yasai = "きゅうり" #yasaiという名前の「変数」
-
-kudamono = ["りんご", "みかん", "バナナ"] #kudamonoという名前の「配列」
-
-

kudamono =["りんご", "みかん", "バナナ"]のように

-

配列は[ ]のなかにいくつもの値を格納して表現される。配列に格納されている1つ1つの値のことを要素と呼ぶ。

-

配列の要素を1つ取り出したい場合は、配列の名前[ x ]で取り出すことが出来る。配列の先頭は0から始まることに注意。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-kudamono = ["りんご", "みかん", "バナナ"] #kudamonoという名前の「配列」
-
-printf("%s\n", kudamono[0])
-printf("%s\n", kudamono[1])
-printf("%s\n", kudamono[2])
-
-
-りんご
-みかん
-バナナ
-
-

[ ]の中の数字のことを添字という。

-
- -
- -

[2]配列への値の格納方法

-

配列とはkudamono = ["りんご", "みかん", "バナナ"]のようにkudamonoと名前のつけた配列に値を格納することが出来る。しかし、値の格納方法はこれ1つではない。

-
-kudamono = []  #配列の中身を空にして、何も格納されていない空の配列を用意する
-
-kudamono[0] = "りんご" #空の配列の先頭に値を格納
-kudamono[1] = "みかん" #空の配列の2番めに値を格納
-kudamono[2] = "バナナ" #空の配列の3番目に値を格納
-
-

この方法でもkudamono = ["りんご", "みかん", "バナナ"]の配列は作ることが出来る。しかし、この添字で直接格納するのではなく

-
-kudamono = []  #配列の中身を空にして、何も格納されていない空の配列を用意する
-
-kudamono << "りんご" #空の配列の末尾にりんごを追加
-kudamono << "みかん" #りんごが先頭に格納されている配列の末尾にみかんを追加
-kudamono << "バナナ" #りんごが先頭、2番めにみかんが格納されている配列の末尾にバナナを追加
-
-

というように「<<」を使って末尾に追加していくほうが便利に格納できる。

-
- -
- -

[3]forの使い方

-

forは配列の中にある複数の値を、順に変数へ代入する処理を行う時に使う。

-

whileと似ていて、forは配列の中身を順に取り出していき、取り出せる中身がなくなったら繰り返しを終了する。

-
-#!/usr/bin/env ruby
-#-*- coding: utf-8 -*-
-
-kudamono = ["りんご", "みかん", "バナナ"]
-
-for i in kudamono #kudamonoの先頭から順に取り出しiに代入する。
-  printf("%sを食べました。\n", i)
-end
-
-
-りんごを食べました。 iにはりんごが代入されていた。
-みかんを食べました。 iにはみかんが代入されていた。
-バナナを食べました。 iにはバナナが代入されていた。
-
-

配列内の要素を先頭から順番に取り出し変数に代入しながら繰り返し処理を行う。全ての値を取り出したら繰り返し終了となる

-
-for 変数 in 配列
-  繰り返したい処理
-end
-
-

これがforの基本構造となる。

-
- -
- -

[4]配列の操作

-

length

-

配列の長さ(要素の数)を返すことが出来る。

-
-#!/usr/bin/env ruby
-# -*- coding: utf-8 -*-
-
-kudamono =["りんご", "みかん", "バナナ"] #要素の数は3つ
-kazu = kudamono.length #kudamono.lenghtは3であるから、kuzuには3が代入される
-printf("%dです。\n", kazu)
-
-
-3です。
-
- -

push

-

配列の末尾に要素を追加する。 「<<」と同じ動きをする。

-
-#!/usr/bin/env ruby
-# -*- coding: utf-8 -*-
-
-kudamono = ["りんご", "みかん", "バナナ"]
-printf("%sです。\n", kudamono.push("もも"))
-
-
-["りんご", "みかん", "バナナ", "もも"]です。
-
- -

shift

-

配列の先頭の要素を取り除き、その値を返す。

-
-#!/usr/bin/env ruby
-# -*- coding: utf-8 -*-
-
-kudamono =["りんご", "みかん", "バナナ"]
-sara = kudamono.shift #配列の先頭の要素を取り除きsaraに代入する
-printf("%sです。\n", sara)
-printf("%sです。\n", kudamono)
-
-
-りんごです。
-["みかん", "バナナ"]です。
-
- -

sort

-

配列の要素を小さい順に並べ替える。文字列を要素に含む場合は、辞書順に並べ替える。

-
-#!/usr/bin/env ruby
-# -*- coding: utf-8 -*-
-
-kazu = [3, 1, 5, 4, 2]
-kudamono =["りんご", "みかん", "バナナ"]
-printf("%sです。\n", kazu.sort)
-printf("%sです。\n", kudamono.sort)
-
-
-[1, 2, 3, 4, 5]です。
-["みかん", "りんご", "バナナ"]です。
-
- -

reverse

-

配列の要素の順序を逆にする。

-
-#!/usr/bin/env ruby
-# -*- coding: utf-8 -*-
-
-kazu = [3, 1, 5, 4, 2]
-kudamono =["りんご", "みかん", "バナナ"]
-printf("%sです。\n", kazu.reverse)
-printf("%sです。\n", kudamono.reverse)
-
-
-[2, 4, 5, 1, 3]です。
-["バナナ", "みかん", "りんご"]です。
-
-
- -
- -

[5]破壊的メソッド

-

破壊的メソッド「!」

-

reverseやsortを使っても、元の配列の並びは変わらない。

-
-#!/usr/bin/env ruby
-# -*- coding: utf-8 -*-
-
-kudamono =["りんご", "みかん", "バナナ"]
-printf("%sです。\n", kudamono.reverse)
-printf("%sです。\n", kudamono)
-
-
-["バナナ", "みかん", "りんご"]です。
-["りんご", "みかん", "バナナ"]です。
-
-

しかし、「!」をつけ「sort!」「reverse!」のようにすると直接操作できる。この操作のことを破壊的操作といい。「sort!」「reverse!」のことを破壊的メソッドと呼ぶ。

-
-#!/usr/bin/env ruby
-# -*- coding: utf-8 -*-
-
-kudamono =["りんご", "みかん", "バナナ"]
-printf("%sです。\n", kudamono.reverse!)
-printf("%sです。\n", kudamono)
-
-
-["バナナ", "みかん", "りんご"]です。
-["バナナ", "みかん", "りんご"]です。
-
-
- -
- -

(6)メソッド

-

[1]メソッドについて

-

決められた計算や処理に名前をつけて、いつでも何度でも呼び出すことができる。

-

この決められた計算や処理のことをメソッドという。メソッドは自分で変数を作るのと同じように自由に名前と処理を考え、作ることが出来る。

-

今まで出できた「printf」、「gets」、「to_i」もメソッドの仲間。「getsメソッド」なんて呼んだりする。

-

メソッドは「getsメソッド」や「printfメソッド」などの最初からRubyに用意されているものもあるが、自分で自由に用意することも出来る。

-

自分でメソッドを用意する時に使うものが「def」。

-
- -
- -

[2]def

-

メソッドはdefを使って定義することが出来る。

-

defを書き始める場合は、最初に「def」「end」を記述する。

-
-def
-  この中に特定の動きをするプログラムを書く
-end
-
-次は今から作るメソッドに名前をつける。 -
-def hello
-  この中に特定の動きをするプログラムを書く
-end
-
-

これで今から作るメソッドの名前は「helloメソッド」に決まった。

-

ここから「helloメソッド」に自分で自由に動きをつけることが出来る。

-

では今回は「helloメソッド」に、Helloとこんにちはを出力する動きをつけることにする。

-
-def hello
-  print("Hello\n")
-  print("こんにちは\n")
-end
-
-

これで、Helloとこんにちはを出力する「helloメソッド」を作成することが出来た。

-

この作成したメソッドを呼び出すのは簡単。いままで「getsメソッド」や「printfメソッド」を呼び出していたやり方と同じ。

-
-name = gets #「getsメソッド」を使いたいときにはgetsと書いていた。
-
-

ここまでで、知らず知らずのうちに「メソッドの呼び出し方」はマスターしている。

-

では、「helloメソッド」を呼び出してみる。

-
-#!/usr/bin/env ruby
-# -*- coding: utf-8 -*-
-
-def hello
-  print("Hello\n")
-  print("こんにちは\n")
-end
-
-hello #「helloメソッド」を呼び出す。
-
-
-Hello
-こんにちは
-
-

事前に「helloメソッド」を作成していたので、helloと書くだけで「helloメソッド」を呼び出すことが出来ている。

-

これで自分で新たにメソッドを作成することが出来た。

-

ここにもう一手間加えていく。

-
-#!/usr/bin/env ruby
-# -*- coding: utf-8 -*-
-
-def hello(x) #「helloメソッド」に「引数」を指定する。
-  print("Hello\n")
-  print("こんにちは\n")
-  printf("私の名前は%sです。\n",x) #「helloメソッド」の「引数」を使って、printfを使用する。
-end
-
-hello("さとうたろう") #「helloメソッド」(引数)を呼び出す。
-
-
-Hello
-こんにちは
-私の名前はさとうたろうです。
-
-

まず注目してほしいのは4行目の「hello(x)」。これは「helloメソッド」に「引数」をつけたもの。

-

引数とは、プログラムの処理をする時に、別の場所から値を持ってこれるようにするために使うもの。

-

今回は「helloメソッド」の処理をする時に、別の場所から値を持ってくるために「引数」を指定した。

-

「hello(x)」とは、「helloメソッド」の「引数」にxを指定するという意味である。

-
-def hello(x) #「helloメソッド」に「引数」を指定する。
-
-

次に注目するべき部分は7行目の「printf("私の名前は%sです。\n",x)」。「printf」は指定した値と組み合わせて文章を出力することのできるもの。今回は「helloメソッド」の引数xを活用することにしている。

-
-def hello(x) #「helloメソッド」に「引数」を指定する。
-
-printf("私の名前は%sです。\n",x) #「helloメソッド」の「引数」を使って、printfを使用する。
-
-

最後に見るべきは10行目の「hello("さとうたろう")」。今回の「helloメソッド」には「引数」xを指定している。つまり、「helloメソッド」は引数xに何かしらの値が代入されていなければ動かないということ。

-

そのため、引数のxに値を代入する必要がある。

-

値を代入するタイミングは「helloメソッド」を呼び出した時。

-

そのため「helloメソッド」の呼び出し方は、「hello("さとうたろう")」というように引数に値を代入しながら呼び出す。

-
-def hello(x) #「helloメソッド」に「引数」を指定してる。
-end
-
-hello("さとうたろう") #「引数」のxに値を代入しながら呼び出す。
-
-

引数を指定したメソッドは、引数に何かしらの値が代入されていなければ動かないということに注意する。

-
- -
- -

[3]返却値について

-

複数の文がメソッド定義されている場合、最後に実行した文の値がメソッドの実行結果として返される。

-

これを返却値という。

-

返却値で返せる実行結果は1つだけ。

-
-#!/usr/bin/env ruby
-# -*- coding: utf-8 -*-
-
-def sum(x) #「sumメソッド」に「引数」を指定する。
-  a = x * 2 #引数を2倍に
-  b = a + 2 #aに2を足す
-  c = b + 5 #bに5を足す
-end
-
-y = 2
-printf("%d\n",sum(y)) #「sumメソッド」(引数)を呼び出す。
-
-
-11
-
-

この場合のメソッドの返却値は、最後に実行された「c = b + 5」の値。このプログラムの場合は11が返却値である。

-

return

-

returnを使うと、「メソッドの処理を中止し、指定した返却値を返す」ことが出来る。

-

先程のプログラムにreturnを使用してみる。

-
-def sum(x)
-  a = x * 2
-  return a #メソッドの処理を中止し、指定した返却値を返す。
-  b = a + 2
-  c = b + 5
-end
-
-y = 2
-printf("%d\n",sum(y))
-
-
-4
-
-

「return a 」と記述することで、メソッドの処理を中止し、aを返却値として返しているので、実行結果は4となる。

-
- -
- - diff --git a/class_content/JDchokai-explain.html b/class_content/JDchokai-explain.html new file mode 100644 index 0000000..3e98af1 --- /dev/null +++ b/class_content/JDchokai-explain.html @@ -0,0 +1,979 @@ + + + + +JD説明シート + + + +

(0) 基礎内容

+

[1]キーボードについて

+

キーボードの配置は主に以下の通りである。

+キーボード +

赤丸で囲まれている部分を【コントロール】といい、プログラムの操作をする上で大事なキーとなるため必ず覚えておく。他にも、【shift(シフト)】というキーもよく使うものであるので必ず覚えておくこと。コントロールを押しながら別のキーを押す、シフトを押しながら別のキーを押すというように別のキーと組み合わせて使うので、その組み合わせをしっかり記憶しておくことでプログラムを書く際にスムーズに進めることが出来る。このJD説明書と別冊の教科書ではコントロールを押しながら、1を押すことを【C-1】と記載する。【C-●】と出てきたら、それはコントロールを押しながら●のキーを押す操作である。

+
+ +
+ +

[2]画面の操作について

+

emacs

+

【C-1】と入力することで、emacs(いーまっくす)というタブを選択することが出来る。このタブを使ってプログラムを作成することが出来る。もしemacsというタブを選択することが出来ない場合、何もない場所を左クリックしてメニューを表示し、上にあるemacsを選んで新しくタブを出す。

+emacs +

kterm

+

【C-2】と入力することで、kterm(けーたーむ)というタブを選択することが出来る。このタブを使ってプログラムを実行したり、作ったプログラムを確認したり出来る。もしktermというタブを選択することが出来ない場合、何もない場所を右クリックしてメニューを表示し、上にあるktermを選んで新しくタブを出す。

+kterm +
+ +
+ +

[3]プログラムの基本的なルール

+

プログラムは上から1行づつ書いていき、上から順に実行されていく。途中から・下からは実行はされない。プログラムは1文字でもおかしい部分があると動いてはくれないため、誤字脱字などに気をつける。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+print("こんにちは!")
+print("JD 鳥海塾の〇〇〇〇です。\n")
+
+
+こんにちは!
+JD 鳥海塾の〇〇〇〇です。
+
+

プログラムは必ず保存してから実行する。保存を行うときには【C-x】【C-s】保存が出来ると、左下にある**のマークが--に変わる。**が保存できていないという証で、ーーが保存完了の証。

+
+ +
+ +

[4]プログラムファイルの作り方

+

プログラムファイルを作るためにはemacs上で【C-x】【C-f】を入力する。すると下の部分に青文字で Find file: ~/ というテキストが出てくる。

+
+Find file: ~/
+
+

そこに続けて Ruby/my1.rb と入力することでmy1.rbというプログラムファイルを作成することが出来る。my1 の部分は自分の好きな名前を入れる事が出来る。 kudamono.rb yasai.rb keisan.rb などである。作成できると何も書いていない真っ白なページが出来るので、そこにプログラムを書くことが出来る。書き終わったら保存を忘れないこと。

+
+Find file: ~/Ruby/my1.rb #my1.rbは自分が分かりやすい名前にしておく
+
+
+ +
+ +

(1) 変数

+

[1]変数について

+

変数とは「値」を入れておく「箱」のようなもので、事前に「値」を格納しておき、後で簡単に取り出せるようにできる。

+

変数を用意するにはプログラムにはこのように書く。

+
+apple = #appleという名前をつけた「変数」を用意
+
+

この記述だけで「apple」という「変数」を作ることが出来る。では早速この変数に値を格納する。

+
+apple = 3 #「変数」に3を格納
+
+これでappleという「変数」に3という「値」を格納することが出来た。この格納する動きのことを代入と表現する。変数を利用して計算のプログラムを作成する。 +
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+apple = 3 #appleという「変数」に「3」を代入
+print(appel + 17) #appleには「3」が格納されているので、3 + 17 になる
+
+
+20
+
+ +

[2]変数のルール

+

変数には自分の好きな名前をつけることが出来るが、使える文字は英数字とアンダースコア(_)のみで、最初の文字は英語の小文字でなければならない

+変数のルール +

上記のルールを守った上で複数の変数を使用したプログラムを作成する。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+apple = 3
+orange = 5
+japan = 2
+google_earth = apple + orange + japan #3つの変数の値の合計をgoogle_earthに代入する
+print(google_earth)
+
+
+10
+
+
+ +
+ +

(2)値

+

[1]値について

+

プログラム内において、値とはプログラムの処理の対象になるデータのこと。

+

これについてはプログラムを確認しながら説明していく。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+print(1 + 2)
+
+
+3
+
+

このプログラムはただ「1+2」を行い「3」を出力しただけのプログラムであるが、この動き自体が実は凄いことをしている。

+

このプログラムには「3」という文字は一切書かれていない。それにも関わらず、プログラムは「1」と「2」という数字を対象として、「足し算という処理」を行い、「3」を導き出している。

+

今回のプログラムの「1」と「2」のように「処理の対処になるもの」のことを「値」と呼ぶ。

+
+ +
+ +

[2]値の形

+

日本語にひらがなとカタカナがあるように、値にも様々な種類がある。

+

その中で代表的なのか「数値」と「文字列」である。

+

数値

+

数値とは「1」や「3.5」のような整数や少数のことを意味する。足し算・引き算、掛け算などの計算をするときなどに使える。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+number1 = 3 #「数値」の3
+number2 = 5 #「数値」の5
+sum = number1 + number2
+print(sum)
+
+
+8 「数値」の3と「数値」の5の足し算になるのでそのまま計算し、「数値」の8という結果になる。
+
+

文字列

+

文字列とは複数の文字が組み合わさったもの。"(ダブルクオーテーション)で囲んで表現する。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+number1 = "3" #「文字列」の3
+number2 = "5" #「文字列」の5
+sum = number1 + number2 #「文字列」の5と「文字列」の3の足し算
+print(sum)
+
+
+35 「文字列」の3と「文字列」の5の足し算になるのでそのまま連結し、「文字列」35という結果になる。
+
+

どちらも3と5の足し算であるが、結果がこんなにも違ってくる。値の形を間違えてプログラムにエラーが起こることが多いので、十分注意する。

+
+ +
+ +

(3)入出力処理

+

[1]gets

+

getsとはキーボードからの入力を読み込むもの。人間が打ち込む値で、必ず文字列となる。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+print("入力をおねがいします。\n")
+number1 = gets #キーボードに打ち込んだ値をnumber1に代入
+number2 = "さようなら"
+print("表示します。\n")
+print(number1)
+print(number2)
+
+
+入力をおねがいします。
+こんにちは[Enter] 入力待ちになるので「こんにちは」とキーボードで入力しEnterキーを押す
+表示します。
+こんにちは
+さようなら
+
+

「入力をおねがいします。」と表示された後にユーザーの入力待ちになる。ここで「こんにちは」と入力し、その文字列がnumber1という変数に代入され、そのままプログラムは進行し、結果が表示される。getsを使うとプログラムを動かした後で自由に変数の中身を変更できる。

+

.chomp

+

getsには打ち込んだ値の後ろに必ず「改行文字」が入力されている。改行文字とは改行の指示を出す文字のことである。「\n」と書く。

+

getsに.chompをつけて改行文字を切り取ることが出来る。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+print("入力をおねがいします。\n")
+number1 = gets.chomp #キーボードに打ち込んだ値をnumber1に代入
+number2 = "さようなら"
+print("表示します。\n")
+print(number1)
+print(number2)
+
+
+入力をおねがいします。
+こんにちは[Enter] 入力待ちになるので「こんにちは」とキーボードで入力しEnterキーを押す
+表示します。
+こんにちはさようなら 改行行文字を切り取ったので改行されずに並んで表示される
+
+

改行文字を切り取ったため、「こんにちは」の後ろで改行されずに次の結果が表示されている。

+

.to_i

+

getsで打ち込んだ値は必ず文字列であるが、「.to_i」を後ろにつけることで整数に変換できる。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+print("入力をおねがいします。\n")
+number1 = gets.chomp.to_i #キーボードに打ち込んだ値をnumber1に代入
+number2 = gets.chomp.to_i #キーボードに打ち込んだ値をnumber2に代入
+print("表示します。\n")
+print(number1 + number2)
+
+
+入力をおねがいします。
+3[Enter] 入力待ちになるので「3」とキーボードで入力しEnterキーを押す
+4[Enter] 入力待ちになるので「4」とキーボードで入力しEnterキーを押す
+表示します。
+7 整数に変換されているので計算が出来る。
+
+

文字列のままでは計算が出来ないが、整数に変換されているので「3 + 4」の計算が可能となり、結果は7が表示される。

+

.to_f

+

こちらはto_iと違い、少数に変換することのできるもの。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+print("入力をおねがいします。\n")
+number1 = gets.chomp.to_f #キーボードに打ち込んだ値をnumber1に代入
+number2 = gets.chomp.to_f #キーボードに打ち込んだ値をnumber2に代入
+print("表示します。\n")
+print(number1 + number2)
+
+
+入力をおねがいします。
+3.5[Enter] 入力待ちになるので「3.5」とキーボードで入力しEnterキーを押す
+4.2[Enter] 入力待ちになるので「4.2」とキーボードで入力しEnterキーを押す
+表示します。
+7.7 少数に変換されているので計算が出来る。
+
+

少数も扱えるようになり、「3.5 + 4.2」の計算が可能となり、結果は7.7が表示される。

+
+ +
+

[2]printf

+

指定した値と組み合わせて文章を出力することのできるもの。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+name = "さとうたろう"
+number1 = 15
+number2 = 1.7
+
+printf("私の名前は%sです。\n",name) #組み合わせたい値が文字列のときは%sを使う
+printf("年齢は%d歳です。\n",number1) #組み合わせたい値が整数のときは%dを使う
+printf("身長は%fメートルです。\n",number2) #組み合わせたい値が少数のときは%fを使う
+
+
+私の名前はさとうたろうです。
+年齢は15歳です。
+身長は1.700000メートルです。
+
+

変数の中身を使って文章を作成することが出来る。これを使えば名前をユーザーに入力させてそれを表示するプログラムも作ることが出来る。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+name = gets.chomp
+
+printf("私の名前は%sです。\n",name) #組み合わせたい値が文字列のときは%sを使う
+
+
+さとうたろう[Enter] 入力待ちになるので「さとうたろう」とキーボードで入力しEnterキーを押す
+私の名前はさとうたろうです。
+
+
+ +
+ +

(4)制御構造

+

[1]if

+

ifはプログラムに分かれ道を作ることができる。「もしも○○であるならば、△△の処理を行う」というような動きをつけられる。

+

if文を書き始める場合には、最初に「if」「end」を記述する。

+
+if
+  この中に特定の動きをするプログラムを書く
+end
+
+

その後はどんな条件の時に「if」「end」の間に記述した動きをするか決める。今回はnumberが「数値の1」の時という条件をつける。

+

+if number == 1
+  この中に特定の動きをするプログラムを書く
+end
+
+

最後にどんな動きをするのかを記述する。

+
+if number == 1
+  print("ありがとう")
+end
+
+

今回は「ありがとう」と出力する動きを記述した。これで、「もしもnumberが数値の1であるならば、「ありがとう」と出力する処理を行う」という動きを作成することが出来た。

+

ここからもう1手順加える。

+
+if number == 1
+  print("ありがとう")
+else
+  この中に特定の動きをするプログラムを書く
+end
+
+

elseは、指定した条件が合わない時の処理を作成することが出来る。今回の場合は、「もしもnumberが数値の1以外であるならば、△△の処理を行う」という条件を作ることが出来る。

+
+if number == 1
+  print("ありがとう")
+else
+  print("ごめんなさい")
+end
+
+

これで、「もしもnumberが数値の1であるならば、「ありがとう」と出力する処理を行う」、「もしもnumberが数値の1以外であるならば、「ごめんなさい」と出力する処理を行う」という動きを作成することが出来た。

+

では、動かしてみる。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+print("数字を入力してください。\n")
+number = gets.chomp.to_i
+
+if number == 1
+  print("ありがとう")
+else
+  print("ごめんなさい")
+end
+
+
+数値を入力してください。
+1[Enter]
+ありがとう
+
+
+数値を入力してください。
+6739[Enter]
+ごめんなさい
+
+

これで1を入力するとありがとう、1以外を入力するとごめんなさいを出力するプログラムを作成することが出来た。

+

最後にここで、もう1つ動きを加えてみる。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+print("数字を入力してください。\n")
+number = gets.chomp.to_i
+
+if number == 1
+  print("ありがとう")
+elsif number == 2 #追加した部分
+  print("どういたしまして") #追加した部分
+else
+  print("ごめんなさい")
+end
+
+
+数値を入力してください。
+1[Enter]
+ありがとう
+
+
+数値を入力してください。
+2[Enter]
+どういたしまして
+
+
+数値を入力してください。
+846[Enter]
+ごめんなさい
+
+

elsifは、「もしも○○であるならば、△△の処理を行う」という処理を追加することが出来る。

+

これでこのプログラムは、「もしもnumberが数値の1であるならば、「ありがとう」と出力する処理を行う」、「もしもnumberが数値の2であるならば、「どういたしまして」と出力する処理を行う」、「もしもnumberが数値の1と2以外であるならば、「ごめんなさい」と出力する処理を行う」という動きをするようになった。

+
+ +
+ +

[2]while

+

whileは「条件〇〇が正しいとき、△△を繰り返す処理を行う」という繰り返しの処理を行うときに使う。何度も繰り返すことをループという

+

while文を書き始める場合には、最初に「while」「end」を記述する。

+
+while
+  この中に特定の動きをするプログラムを書く
+end
+
+

その後はどんな条件の時に「while」「end」の間に記述した動きをループさせるか決める。今回はnumberが「数値の5」以下の時はループさせ続けるという条件をつける。

+

+while number < 5
+  この中に特定の動きをするプログラムを書く
+end
+
+

最後にどんな動きをするのかを記述する。

+
+while number < 5
+  print("ありがとう\n")
+  number -= 1
+end
+
+

これで「number < 5 が正しいとき、ありがとうを出力し、numberの値を1増やす動きを繰り返す処理を行う」というプログラムが作成できた。

+

では、動かしてみる。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+number = 0
+
+while number < 5
+  print("ありがとう\n")
+  number += 1
+end
+
+
+ありがとう 
+ありがとう 
+ありがとう 
+ありがとう 
+ありがとう この回の繰り返しでnumbreは5になり、次の繰り返しの時に条件を満たしていないので繰り返しは終了する。
+
+

1回の繰り返しごとにnumberに1づつ代入され、numberが5になったので6回目の繰り返しが条件を満たせず終了した。

+

break

+

繰り返しの実行を中止し、繰り返しから抜けることができる。

+

今回はif文と組み合わせて作成する。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+number = 0
+sum = 0
+print("テストの合計点を計算しましょう。\n")
+
+while true #繰り返しの条件を「true」とすることで永遠にループさせることが出来る。
+  print("テストの点数を入力してください\n")
+  test = gets.chomp.to_i
+  if test == 0 #もしもtestが0であるならば
+    break #繰り返しの実行を中止し、繰り返しから抜ける
+  end #if文のend
+  printf("%d点\n",test)
+  sum += test
+  number += 1
+end #while文のend
+printf("あなたの%d回分のテストの合計得点は%d点です。\n", number, sum)
+
+
+テストの合計点を計算しましょう。
+テストの点数を入力してください。
+80[Enter]
+80点
+テストの点数を入力してください。
+75[Enter]
+75点
+テストの点数を入力してください。
+70[Enter]
+70点
+テストの点数を入力してください。
+0[Enter]
+あなたの3回分のテストの合計点は225点です。
+
+

このプログラムは、キーボードで点数を打ち込み、テストの合計点数を計算するプログラムである。

+

繰り返しの条件を「true」とすることで、whileの中を永遠に繰り返し続ける処理を書くことが出来る。このような場合にbreakは役に立つ。10・11・12行目のif文に注目してもらいたい。

+
+if test == 0
+  break
+end
+
+

このif文で「もしもtestが0であるならば、繰り返しの実行を中止し、繰り返しから抜ける処理を行う」という動きを作成している。

+

こうすることで、ユーザーの好きなタイミングで繰り返しを抜けさせることもできるようになる。

+

制御構造を1度に2つも使用しているため、endも2つ出てきている。混乱しないように、「if」と「while」を書くときは、最初に「end」とセットで書くように心がける。

+

redo

+

その繰り返しを無効化し、その繰り返しの先頭からやりなおす事が出来る。

+

先程のテストの点数の合計を出すプログラムに、点数を打ち間違えた時にやり直せる機能をredoを使って作成する。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+number = 0
+sum = 0
+print("テストの合計点を計算しましょう。\n")
+
+while true 
+  print("テストの点数を入力してください。\n")
+  test = gets.chomp.to_i
+  if test == 0
+    break
+  end #breakのif文用のend
+  printf("%d点\n",test)
+  print("間違いありませんか? 訂正したければno,問題なければno以外を入力してください。\n") #確認用のテキストを追加
+  choose = gets.chomp #chooseにキーボードで入力したものを代入
+  if choose == "no" #もしもchooseがnoであるならば
+    print("今の入力をなかったことにします。\n")
+    redo #この繰り返しを無効化し、この繰り返しの先頭からやりなおす
+  else #もしもchooseがno以外であるならば
+  sum += test
+  number += 1
+  end #redoのif文用のend
+end #while文用のend
+printf("あなたの%d回分のテストの合計得点は%d点です。\n", number, sum)
+
+
+テストの合計点を計算しましょう。
+テストの点数を入力してください。
+80[Enter]
+80点
+間違いありませんか? 訂正したければno,問題なければno以外を入力してください。
+yes[Enter]
+テストの点数を入力してください。
+75[Enter]
+75点
+間違いありませんか? 訂正したければno,問題なければno以外を入力してください。
+no[Enter]
+今の入力をなかったことにします。
+テストの点数を入力してください。
+70[Enter]
+70点
+間違いありませんか? 訂正したければno,問題なければno以外を入力してください。
+はい[Enter]
+テストの点数を入力してください。
+0[Enter]
+あなたの2回分のテストの合計点は150点です。
+
+

大きな追加部分は17行目〜23行目の部分

+
+if choose == "no"
+  print("今の入力をなかったことにします。\n")
+  redo
+else
+sum += test
+number += 1
+end
+
+

このif文で「もしもchooseがnoであるならば、この繰り返しを無効化し、この繰り返しの先頭からやりなおす」,「もしもchooseがno以外であるならば、sumに入力したテストの点数を加算し、numberを1増やす」という動きを作成している。

+
+ +
+ +

(5)配列

+

[1]配列とは

+

配列とは、データをたくさん詰めることの出来る引き出しのようなもので、複数の値をひとまとめにすることが出来る。

+
+yasai = "きゅうり" #yasaiという名前の「変数」
+
+kudamono = ["りんご", "みかん", "バナナ"] #kudamonoという名前の「配列」
+
+

kudamono =["りんご", "みかん", "バナナ"]のように

+

配列は[ ]のなかにいくつもの値を格納して表現される。配列に格納されている1つ1つの値のことを要素と呼ぶ。

+

配列の要素を1つ取り出したい場合は、配列の名前[ x ]で取り出すことが出来る。配列の先頭は0から始まることに注意。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+kudamono = ["りんご", "みかん", "バナナ"] #kudamonoという名前の「配列」
+
+printf("%s\n", kudamono[0])
+printf("%s\n", kudamono[1])
+printf("%s\n", kudamono[2])
+
+
+りんご
+みかん
+バナナ
+
+

[ ]の中の数字のことを添字という。

+
+ +
+ +

[2]配列への値の格納方法

+

配列とはkudamono = ["りんご", "みかん", "バナナ"]のようにkudamonoと名前のつけた配列に値を格納することが出来る。しかし、値の格納方法はこれ1つではない。

+
+kudamono = []  #配列の中身を空にして、何も格納されていない空の配列を用意する
+
+kudamono[0] = "りんご" #空の配列の先頭に値を格納
+kudamono[1] = "みかん" #空の配列の2番めに値を格納
+kudamono[2] = "バナナ" #空の配列の3番目に値を格納
+
+

この方法でもkudamono = ["りんご", "みかん", "バナナ"]の配列は作ることが出来る。しかし、この添字で直接格納するのではなく

+
+kudamono = []  #配列の中身を空にして、何も格納されていない空の配列を用意する
+
+kudamono << "りんご" #空の配列の末尾にりんごを追加
+kudamono << "みかん" #りんごが先頭に格納されている配列の末尾にみかんを追加
+kudamono << "バナナ" #りんごが先頭、2番めにみかんが格納されている配列の末尾にバナナを追加
+
+

というように「<<」を使って末尾に追加していくほうが便利に格納できる。

+
+ +
+ +

[3]forの使い方

+

forは配列の中にある複数の値を、順に変数へ代入する処理を行う時に使う。

+

whileと似ていて、forは配列の中身を順に取り出していき、取り出せる中身がなくなったら繰り返しを終了する。

+
+#!/usr/bin/env ruby
+#-*- coding: utf-8 -*-
+
+kudamono = ["りんご", "みかん", "バナナ"]
+
+for i in kudamono #kudamonoの先頭から順に取り出しiに代入する。
+  printf("%sを食べました。\n", i)
+end
+
+
+りんごを食べました。 iにはりんごが代入されていた。
+みかんを食べました。 iにはみかんが代入されていた。
+バナナを食べました。 iにはバナナが代入されていた。
+
+

配列内の要素を先頭から順番に取り出し変数に代入しながら繰り返し処理を行う。全ての値を取り出したら繰り返し終了となる

+
+for 変数 in 配列
+  繰り返したい処理
+end
+
+

これがforの基本構造となる。

+
+ +
+ +

[4]配列の操作

+

length

+

配列の長さ(要素の数)を返すことが出来る。

+
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+kudamono =["りんご", "みかん", "バナナ"] #要素の数は3つ
+kazu = kudamono.length #kudamono.lenghtは3であるから、kuzuには3が代入される
+printf("%dです。\n", kazu)
+
+
+3です。
+
+ +

push

+

配列の末尾に要素を追加する。 「<<」と同じ動きをする。

+
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+kudamono = ["りんご", "みかん", "バナナ"]
+printf("%sです。\n", kudamono.push("もも"))
+
+
+["りんご", "みかん", "バナナ", "もも"]です。
+
+ +

shift

+

配列の先頭の要素を取り除き、その値を返す。

+
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+kudamono =["りんご", "みかん", "バナナ"]
+sara = kudamono.shift #配列の先頭の要素を取り除きsaraに代入する
+printf("%sです。\n", sara)
+printf("%sです。\n", kudamono)
+
+
+りんごです。
+["みかん", "バナナ"]です。
+
+ +

sort

+

配列の要素を小さい順に並べ替える。文字列を要素に含む場合は、辞書順に並べ替える。

+
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+kazu = [3, 1, 5, 4, 2]
+kudamono =["りんご", "みかん", "バナナ"]
+printf("%sです。\n", kazu.sort)
+printf("%sです。\n", kudamono.sort)
+
+
+[1, 2, 3, 4, 5]です。
+["みかん", "りんご", "バナナ"]です。
+
+ +

reverse

+

配列の要素の順序を逆にする。

+
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+kazu = [3, 1, 5, 4, 2]
+kudamono =["りんご", "みかん", "バナナ"]
+printf("%sです。\n", kazu.reverse)
+printf("%sです。\n", kudamono.reverse)
+
+
+[2, 4, 5, 1, 3]です。
+["バナナ", "みかん", "りんご"]です。
+
+
+ +
+ +

[5]破壊的メソッド

+

破壊的メソッド「!」

+

reverseやsortを使っても、元の配列の並びは変わらない。

+
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+kudamono =["りんご", "みかん", "バナナ"]
+printf("%sです。\n", kudamono.reverse)
+printf("%sです。\n", kudamono)
+
+
+["バナナ", "みかん", "りんご"]です。
+["りんご", "みかん", "バナナ"]です。
+
+

しかし、「!」をつけ「sort!」「reverse!」のようにすると直接操作できる。この操作のことを破壊的操作といい。「sort!」「reverse!」のことを破壊的メソッドと呼ぶ。

+
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+kudamono =["りんご", "みかん", "バナナ"]
+printf("%sです。\n", kudamono.reverse!)
+printf("%sです。\n", kudamono)
+
+
+["バナナ", "みかん", "りんご"]です。
+["バナナ", "みかん", "りんご"]です。
+
+
+ +
+ +

(6)メソッド

+

[1]メソッドについて

+

決められた計算や処理に名前をつけて、いつでも何度でも呼び出すことができる。

+

この決められた計算や処理のことをメソッドという。メソッドは自分で変数を作るのと同じように自由に名前と処理を考え、作ることが出来る。

+

今まで出できた「printf」、「gets」、「to_i」もメソッドの仲間。「getsメソッド」なんて呼んだりする。

+

メソッドは「getsメソッド」や「printfメソッド」などの最初からRubyに用意されているものもあるが、自分で自由に用意することも出来る。

+

自分でメソッドを用意する時に使うものが「def」。

+
+ +
+ +

[2]def

+

メソッドはdefを使って定義することが出来る。

+

defを書き始める場合は、最初に「def」「end」を記述する。

+
+def
+  この中に特定の動きをするプログラムを書く
+end
+
+次は今から作るメソッドに名前をつける。 +
+def hello
+  この中に特定の動きをするプログラムを書く
+end
+
+

これで今から作るメソッドの名前は「helloメソッド」に決まった。

+

ここから「helloメソッド」に自分で自由に動きをつけることが出来る。

+

では今回は「helloメソッド」に、Helloとこんにちはを出力する動きをつけることにする。

+
+def hello
+  print("Hello\n")
+  print("こんにちは\n")
+end
+
+

これで、Helloとこんにちはを出力する「helloメソッド」を作成することが出来た。

+

この作成したメソッドを呼び出すのは簡単。いままで「getsメソッド」や「printfメソッド」を呼び出していたやり方と同じ。

+
+name = gets #「getsメソッド」を使いたいときにはgetsと書いていた。
+
+

ここまでで、知らず知らずのうちに「メソッドの呼び出し方」はマスターしている。

+

では、「helloメソッド」を呼び出してみる。

+
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+def hello
+  print("Hello\n")
+  print("こんにちは\n")
+end
+
+hello #「helloメソッド」を呼び出す。
+
+
+Hello
+こんにちは
+
+

事前に「helloメソッド」を作成していたので、helloと書くだけで「helloメソッド」を呼び出すことが出来ている。

+

これで自分で新たにメソッドを作成することが出来た。

+

ここにもう一手間加えていく。

+
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+def hello(x) #「helloメソッド」に「引数」を指定する。
+  print("Hello\n")
+  print("こんにちは\n")
+  printf("私の名前は%sです。\n",x) #「helloメソッド」の「引数」を使って、printfを使用する。
+end
+
+hello("さとうたろう") #「helloメソッド」(引数)を呼び出す。
+
+
+Hello
+こんにちは
+私の名前はさとうたろうです。
+
+

まず注目してほしいのは4行目の「hello(x)」。これは「helloメソッド」に「引数」をつけたもの。

+

引数とは、プログラムの処理をする時に、別の場所から値を持ってこれるようにするために使うもの。

+

今回は「helloメソッド」の処理をする時に、別の場所から値を持ってくるために「引数」を指定した。

+

「hello(x)」とは、「helloメソッド」の「引数」にxを指定するという意味である。

+
+def hello(x) #「helloメソッド」に「引数」を指定する。
+
+

次に注目するべき部分は7行目の「printf("私の名前は%sです。\n",x)」。「printf」は指定した値と組み合わせて文章を出力することのできるもの。今回は「helloメソッド」の引数xを活用することにしている。

+
+def hello(x) #「helloメソッド」に「引数」を指定する。
+
+printf("私の名前は%sです。\n",x) #「helloメソッド」の「引数」を使って、printfを使用する。
+
+

最後に見るべきは10行目の「hello("さとうたろう")」。今回の「helloメソッド」には「引数」xを指定している。つまり、「helloメソッド」は引数xに何かしらの値が代入されていなければ動かないということ。

+

そのため、引数のxに値を代入する必要がある。

+

値を代入するタイミングは「helloメソッド」を呼び出した時。

+

そのため「helloメソッド」の呼び出し方は、「hello("さとうたろう")」というように引数に値を代入しながら呼び出す。

+
+def hello(x) #「helloメソッド」に「引数」を指定してる。
+end
+
+hello("さとうたろう") #「引数」のxに値を代入しながら呼び出す。
+
+

引数を指定したメソッドは、引数に何かしらの値が代入されていなければ動かないということに注意する。

+
+ +
+ +

[3]返却値について

+

複数の文がメソッド定義されている場合、最後に実行した文の値がメソッドの実行結果として返される。

+

これを返却値という。

+

返却値で返せる実行結果は1つだけ。

+
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+def sum(x) #「sumメソッド」に「引数」を指定する。
+  a = x * 2 #引数を2倍に
+  b = a + 2 #aに2を足す
+  c = b + 5 #bに5を足す
+end
+
+y = 2
+printf("%d\n",sum(y)) #「sumメソッド」(引数)を呼び出す。
+
+
+11
+
+

この場合のメソッドの返却値は、最後に実行された「c = b + 5」の値。このプログラムの場合は11が返却値である。

+

return

+

returnを使うと、「メソッドの処理を中止し、指定した返却値を返す」ことが出来る。

+

先程のプログラムにreturnを使用してみる。

+
+def sum(x)
+  a = x * 2
+  return a #メソッドの処理を中止し、指定した返却値を返す。
+  b = a + 2
+  c = b + 5
+end
+
+y = 2
+printf("%d\n",sum(y))
+
+
+4
+
+

「return a 」と記述することで、メソッドの処理を中止し、aを返却値として返しているので、実行結果は4となる。

+
+ +
+ + diff --git a/class_content/index.html b/class_content/index.html index 0754cbc..8d5ae62 100644 --- a/class_content/index.html +++ b/class_content/index.html @@ -18,7 +18,7 @@

ジュニアドクター鳥海塾第2021授業内容

※(8月11日現在)感染症対策や講師の都合により変更になる場合があります。

- +

今までの授業内容

第1日目

diff --git a/img/emacs.png b/img/emacs.png index 081587b..97f6e2a 100644 --- a/img/emacs.png +++ b/img/emacs.png Binary files differ diff --git a/img/kterm.png b/img/kterm.png index adb1a97..54ee952 100644 --- a/img/kterm.png +++ b/img/kterm.png Binary files differ