nendのスマホアプリ開発入門

nendのスマホアプリ開発入門

Flutterの学習に役立つおすすめリンク集と試したことメモ

Flutterで爆速でポートフォリオを作ろう!

https://zenn.dev/welchi/books/flutter-portfolio-book

Flutterとfirebaseを使ったシンプル開発を解説してます。


Flutter と Firebaseで作る!カウンターアプリ

https://zenn.dev/snova301/books/6df29a230d681f

Flutterとfirebaseを使ったシンプル開発を解説してます。


Flutter基礎入門 by Flutter大学

https://zenn.dev/kboy/books/ca6a9c93fd23f3

Flutterの教科書 by Flutter大学

zenn.dev

Flutterの教科書2 by Flutter大学

zenn.dev


いちから始めるFlutterモバイルアプリ開発

go言語の基礎入門について解説します。

レッスン1

Goに触れてみよう Goに触れてみよう Goの基礎を学ぼう GoのFormat Goの基本 数値 数値の計算 文字列の連結 変数を使ってみよう 変数の基本 変数の更新 色々な変数の作り方 変数とエラー 変数と自己代入 真偽値と条件分岐 if文を使ってみよう 真偽値 else else if 条件式を組み合わせよう

switch

Goに触れてみよう

//コンソールには「Hello, Go」と表示される

package main

func main() {
    // 下記の「世界」の部分を「Go」に書き換えてください
    println("Hello, Go")
}

Goの基礎を学ぼう

GoのFormat

コードの整形 プログラムは人が読み書きするものなので「読みやすいように書く」ことが大切です。左と右の図を比べると、右のように空白やインデント(文頭の字下げ)が統一されている方が読みやすいことがわかると思います。 Goにはこの統一の仕方にもルールがあり、自動でそれに合わせて整形するためのボタンを演習画面に用意しています。ぜひ活用してみましょう。


Goの基本

//で一行コメントアウトされる //文字列はダブルクオーテーションで囲う

package main

func main() {
    // 「こんにちは、世界」と出力してください
    println("こんにちは、世界")
    
    // この行をコメントにしてください
    
}

数値の計算1

package main

func main() {
    // 数値の7を出力してください
    println(7)
    
    // 9に3足した値を出力してください
    println(9 + 3)
    
    // 「9 + 3」を文字列として出力してください   
    println("9 + 3")
    
}

ターミナルには以下のように表示される。

7 12 93


数値の計算2

package main

func main() {
    // 12を3で割った値を出力してください
    println(12 / 3)
    
    // 3に6を掛けた値を出力してください
    println(3 * 6)
    
    // 8を3で割った時の余りを出力してください
    println(8 % 3)
}

ターミナルには以下のように表示される。

4 18 2


文字列の連結

package main

func main() {
    //「こんにちは世界」となるように文字列を連結して出力してください
    println("こんにちは" + "世界")
    
    // 文字列"38"と"19"を連結して出力してください
    println("38" + "19")
    
    // 数値38に19を足して出力してください
    println(38 + 19)

}

ターミナルには以下のように表示される。

こんにちわ世界 3819 57


変数の基本

package main

func main() {
    // 変数messageを定義し、「Hello, 世界」を代入してください
    var message string = "Hello, 世界"
    
    // 変数messageの値を出力してください
    println(message)
    
}

ターミナルには以下のように表示される。

Hello, 世界


変数の更新

package main

func main () {
    var message string = "Hello, 世界"

    // 変数messageの値を、文字列"Hello, Go"に更新してください
    message = "Hello, Go"
    
    println(message)
}

ターミナルには以下のように表示される。

Hello, Go


色々な変数の作り方

package main

func main() {
    // 変数messageを省略して定義し、"Hello, 世界"を代入してください
    message := "Hello, 世界"
    
    // 変数numberを省略して定義し、100を代入してください
    number := 100
    
    // 変数messageと変数numberを同時に出力してください
    println(message, number)
    
}

ターミナルには以下のように表示される。

Hello, 世界 100


変数とエラー

package main

func main() {
    // s1とs2の定義がまだされていなく、出力できないので消してください
    
    
    s1 := "Hello"
    s2 := "世界"
    
    // 変数定義から代入に変更してください
    s1 = "こんにちは"

    // 変数s1はString型なので、消してください
    
    
    // 変数s1とs2を同時に出力してください
    println(s1, s2)
    
}

ターミナルには以下のように表示される。

こんにちわ 世界


変数と自己代入

package main

func main() {
    n := 100
    // nから10を引いてnに代入しましょう
    n -= 10
    
    println(n)
    
    
    m := 10
    // mに1を足してmに代入しましょう
    m++
    
    println(m)
}

ターミナルには以下のように表示される。

90 11


真偽値と条件分岐

package main

func main() {
    x := 123
    y := 5 * 6
    
    // xが100以上の場合に「xは100以上です」と出力してください
    if x >= 100 {
        println("xは100以上です")
    }

    // yが40より小さい場合に「yは40より小さいです」と出力してください
    if y < 40 {
        println("yは40より小さいです")
    }

}

if文を使ってみよう

package main

func main() {
    x := 123
    y := 5 * 6
    
    // xが100以上の場合に「xは100以上です」と出力してください
    if x >= 100 {
        println("xは100以上です")
    }

    // yが40より小さい場合に「yは40より小さいです」と出力してください
    if y < 40 {
        println("yは40より小さいです")
    }

}

ターミナルには以下のように表示される。

xは100以上です

yは40より小さいです

真偽値

package main

func main() {
    x := 7 * 10
    y := 5 * 6
    
    // xの値が70と等しい場合のif文を作成してください
    if x == 70 {
        println("xは70です")
    }
    
    // yの値が40と等しくない場合のif文を作成してください
    if y != 40 {
        println("yは40ではありません")
    }
    
}

ターミナルには以下のように表示される。

xは70です yは40ではありません


else

package main

func main() {
    money := 100
    price := 200
    
    // elseで条件分岐を追加してください
    if money >= price {
        println("商品を買うことができます")
    } else {
        println("お金が足りません")
    }
}

ターミナルには以下のように表示される。

お金が足りません


else if

package main

func main() {
    money := 200
    price := 200
    
    // else ifとelseの条件分岐を追加してください
    if money > price {
        println("商品を買うことができます")
    } else if money == price {
        println("商品を買うことができますが所持金が0円になります")
    } else {
        println("お金が足りません")
    }
}

ターミナルには以下のように表示される。

商品を買うことができますが所持金が0円になります


条件式を組み合わせよう

package main

func main() {
    x := 20
    // xが10以上30以下の場合に「xは10以上30以下です」と出力してください
    if x >= 10 && x <= 30 {
        println("xは10以上30以下です")
    }
    
    y := 60
    // yが10未満または30より大きい場合に「yは10未満または30より大きいです」と出力してください
    if y < 10 || y > 30 {
        println("yは10未満または30より大きいです")
    }
    
    // zが77ではない場合に「zは77ではありません」と出力してください
    z := 55
    if !(z == 77) {
        println("zは77ではありません")
    }
    
}

ターミナルには以下のように表示される。

"xは10以上30以下です" yは10未満または30より大きいです zは77ではありません"


switch

package main

func main() {
    n := 3
    switch n {
        // caseを追加し、nが0の場合、"凶です"と出力してください
        case 0:
            println("凶です")
        // caseを追加し、nが1または2の場合、"吉です"と出力してください
        case 1, 2:
            println("吉です")
        // caseを追加し、nが3または4の場合、"中吉です"と出力してください
        case 3, 4:
            println("中吉です")
        // caseを追加し、nが5の場合、"大吉です"と出力してください
        case 5:
            println("大吉です")
    }
}

ターミナルには以下のように表示される。

中吉です



Go 学習コース II コース詳細へ 目標物を確認しよう 1. 目標物を確認しよう 標準パッケージを使ってみよう 2. fmtパッケージ 3. 書式付き出力 4. 書式付き出力(整数) 5. 改行文字 繰り返し処理 6. for おみくじアプリを改良しよう 7. randパッケージ 8. 完全な乱数を生成しよう

9. おみくじアプリを改良しよう

1. 目標物を確認しよう

//コンソールには「Hello, Go」と表示される

package main 

import "fmt"
import "math/rand"
import "time"

func main() {
    rand.Seed(time.Now().Unix())
    
    for i := 1; i <= 3; i++ {
        fmt.Printf("%d回目のおみくじ結果: ", i)
        
        number := rand.Intn(6)
        switch number {
            case 0:
                fmt.Println("凶です")
            case 1, 2:
                fmt.Println("吉です")
            case 3, 4:
                fmt.Println("中吉です")
            case 5:
                fmt.Println("大吉です")
        }
    }
}

2. fmtパッケージ

package main

// 「fmt」パッケージをインポートしてください import "fmt"

func main() { // fmtパッケージを使って、「Hello, 世界」と出力するように書き換えてください fmt.Println("Hello, 世界") }


3. 書式付き出力

//で一行コメントアウトされる //文字列はダブルクオーテーションで囲う

package main

import "fmt"

func main() {
    weather := "晴れ"
    
    // fmt.Printfと変数weatherを用いて「今日の天気は◯◯です」と表示してください
    fmt.Printf("今日の天気は%sです", weather)

}

ターミナルには以下のように表示される。

今日の天気は晴れです


4. 書式付き出力(整数)

package main

import "fmt"

func main() {
    month := 6
    day := 19
    
    // fmt.Printfと、変数month・dayを用いて、「今日は、◯月◯日です」と表示してください
    fmt.Printf("今日は、%d月%d日です", month, day)
    
}

ターミナルには以下のように表示される。

今日は、6月19日です


5. 改行文字

package main

import "fmt"

func main() {
    name1 := "にんじゃわんこ"
    name2 := "ひつじ仙人"
    name3 := "ベイビーわんこ"
    
    // 改行文字を用いて、それぞれの文字列の末尾で改行してください
    fmt.Printf("ようこそ、%sさん\n", name1)
    fmt.Printf("ようこそ、%sさん\n", name2)
    fmt.Printf("ようこそ、%sさん\n", name3)
}

ターミナルには以下のように表示される。

4 18 2


6. for

package main

import "fmt"

func main() {
    // 1から100までの整数を出力してください
    for i := 1; i <= 100; i++ {
        fmt.Println(i) 
    }
}

ターミナルには以下のように表示される。

1から100が順に表示される。


7. randパッケージ

package main

import "fmt"
//「math/rand」パッケージをインポートしてください
import "math/rand"

func main() {
    
    for i := 1; i <= 5; i++ {
        // 0~9のランダムな整数を生成し、出力してください
        fmt.Println(rand.Intn(10))
    }
}

ターミナルには以下のように表示される。

0~9のランダムな整数が5回出力される


8. 完全な乱数を生成しよう

package main

import "fmt"
import "math/rand"
//「time」パッケージをインポートしてください
import "time"

func main() {
    // 指定されたコードを追加してください
rand.Seed(time.Now().Unix())    
    
    for i := 1; i <= 5; i++ {
        fmt.Println(rand.Intn(10))
    }
}

ターミナルには以下のように表示される。

0~9のランダムな整数が5回出力される


9. おみくじアプリを改良しよう

package main 

import "fmt"
// 「math/rand」パッケージと「time」パッケージをインポートしてください
import "math/rand"
import "time"

func main() {
    // 指定されたコードを貼り付けてください
    rand.Seed(time.Now().Unix())
    
    // for文を作成してください
    for i := 1; i <= 3; i++ {
        fmt.Printf("%d回目のおみくじ結果: ", i)
        
        number := rand.Intn(6)
        switch number {
            case 0:
                fmt.Println("凶です")
            case 1, 2:
                fmt.Println("吉です")
            case 3, 4:
                fmt.Println("中吉です")
            case 5:
                fmt.Println("大吉です")
        }
    }
}

ターミナルには以下のように表示される。

0から6までの乱数で4のif条件に解れる処理を 3回の繰り返し処理行う。



}



----------------------------------------
##if文を使ってみよう

package main

func main() { x := 123 y := 5 * 6

// xが100以上の場合に「xは100以上です」と出力してください
if x >= 100 {
    println("xは100以上です")
}

// yが40より小さい場合に「yは40より小さいです」と出力してください
if y < 40 {
    println("yは40より小さいです")
}

}

###ターミナルには以下のように表示される。
xは100以上です
yは40より小さいです
----------------------------------------
##真偽値

package main

func main() { x := 7 * 10 y := 5 * 6

// xの値が70と等しい場合のif文を作成してください
if x == 70 {
    println("xは70です")
}

// yの値が40と等しくない場合のif文を作成してください
if y != 40 {
    println("yは40ではありません")
}

}

###ターミナルには以下のように表示される。
xは70です
yは40ではありません

----------------------------------------
##else

package main

func main() { money := 100 price := 200

// elseで条件分岐を追加してください
if money >= price {
    println("商品を買うことができます")
} else {
    println("お金が足りません")
}

}



###ターミナルには以下のように表示される。
お金が足りません

----------------------------------------
##else if

package main

func main() { money := 200 price := 200

// else ifとelseの条件分岐を追加してください
if money > price {
    println("商品を買うことができます")
} else if money == price {
    println("商品を買うことができますが所持金が0円になります")
} else {
    println("お金が足りません")
}

}


###ターミナルには以下のように表示される。
商品を買うことができますが所持金が0円になります

----------------------------------------
##条件式を組み合わせよう

package main

func main() { x := 20 // xが10以上30以下の場合に「xは10以上30以下です」と出力してください if x >= 10 && x <= 30 { println("xは10以上30以下です") }

y := 60
// yが10未満または30より大きい場合に「yは10未満または30より大きいです」と出力してください
if y < 10 || y > 30 {
    println("yは10未満または30より大きいです")
}

// zが77ではない場合に「zは77ではありません」と出力してください
z := 55
if !(z == 77) {
    println("zは77ではありません")
}

}

###ターミナルには以下のように表示される。
"xは10以上30以下です"
yは10未満または30より大きいです
zは77ではありません"

----------------------------------------
##switch

package main

func main() { n := 3 switch n { // caseを追加し、nが0の場合、"凶です"と出力してください case 0: println("凶です") // caseを追加し、nが1または2の場合、"吉です"と出力してください case 1, 2: println("吉です") // caseを追加し、nが3または4の場合、"中吉です"と出力してください case 3, 4: println("中吉です") // caseを追加し、nが5の場合、"大吉です"と出力してください case 5: println("大吉です") } }

###ターミナルには以下のように表示される。
中吉です

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Go 学習コース III
コース詳細へ
目標物を確認しよう
1. 目標物を確認しよう
文字列の入力
2. fmt.Scan関数を使ってみよう
3. 関数とは
4. 関数の基本
引数と戻り値
5. 引数
6. 問題番号を出す
7. 戻り値とは
8. 計算をしよう
9. 引数と戻り値
スコープを学ぼう
10. 関数に値を渡すときの注意点(1)
11. 関数に値を渡すときの注意点(2)
----------------------------------------
##1. 目標物を確認しよう

//タイピングゲームを作ります

package main

import "fmt"

func main() { totalScore := ask(1, "dog") totalScore += ask(2, "cat") totalScore += ask(3, "fish")

fmt.Println("スコア", totalScore)

}

func ask(number int, question string) int { var input string fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question) fmt.Scan(&input)

score := 0

if question == input {
    fmt.Println("正解!")
    score = 10
} else {
    fmt.Println("不正解!")
}

return score

}

----------------------------------------

##2. fmt.Scan関数を使ってみよう


package main

import "fmt"

func main() { // 変数inputを定義してください var input string

// 「次の単語を入力してください: dog」と出力してください
fmt.Println("次の単語を入力してください: dog")

// Scanで入力を受け取ってください
fmt.Scan(&input)

// 受け取った値を出力してください
fmt.Printf("%sと入力されました", input)

}


----------------------------------------
##3. 関数とは



package main

import "fmt"

func main() { // 以下のコードを切り取ってください // ここから上を切り取ってください

// ask関数を呼び出してください
ask()

}

// ask関数を定義してください func ask() { var input string fmt.Println("次の単語を入力してください: dog") fmt.Scan(&input) fmt.Printf("%sと入力されました", input) }

###ターミナルには以下のように表示される。
7
12
93

----------------------------------------
##4. 関数の基本


package main

import "fmt"

func main() { ask() // もう一度ask関数を呼び出してください ask() }

func ask() { var input string fmt.Println("次の単語を入力してください: dog") fmt.Scan(&input) fmt.Printf("%sと入力されました\n", input) }

###ターミナルには以下のように表示される。



----------------------------------------
##5. 引数


package main

import "fmt"

func main() { // 引数を使って、3回askを呼んでください ask("dog") ask("cat") ask("fish") }

// 引数questionを追加してください func ask(question string) { var input string // 以下の内容をfmt.Printfを使用して、修正してください fmt.Printf("次の単語を入力してください: %s\n", question) fmt.Scan(&input) fmt.Printf("%sと入力されました\n", input) }

###ターミナルには以下のように表示される。



----------------------------------------
##6. 問題番号を出す


package main

import "fmt"

func main() { // 引数に1を渡してください ask(1, "dog")

// 引数に2を渡してください
ask(2, "cat")

// 引数に3を渡してください
ask(3, "fish")

}

// 引数numberを追加してください func ask(number int, question string) { var input string // 下の1行を削除し、指定されたコードを貼り付けてください fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question)

fmt.Scan(&input)
fmt.Printf("%sと入力されました\n", input)

}

###ターミナルには以下のように表示される。




----------------------------------------
##7. 戻り値とは

package main

import "fmt"

func main() { // totalScoreにask関数からの戻り値を代入してください totalScore := ask(1, "dog")

// 指定されたコードを貼り付けてください
fmt.Println("スコア", totalScore)

}

// 戻り値の型を定義してください func ask(number int, question string) int { var input string fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question) fmt.Scan(&input) fmt.Printf("%sと入力されました\n", input) // 戻り値の値を追加してください return 10

}

###ターミナルには以下のように表示される。


----------------------------------------
##8. 計算をしよう


package main

import "fmt"

func main() { totalScore := ask(1, "dog") // totalScoreにask関数からの戻り値を足してください totalScore += ask(2, "cat") totalScore += ask(3, "fish")

fmt.Println("スコア", totalScore)

}

func ask(number int, question string) int { var input string fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question) fmt.Scan(&input) fmt.Printf("%sと入力されました\n", input)

return 10

}


###ターミナルには以下のように表示される。



----------------------------------------
##9. 引数と戻り値

package main

import "fmt"

func main() { totalScore := ask(1, "dog") totalScore += ask(2, "cat") totalScore += ask(3, "fish")

fmt.Println("スコア", totalScore)

}

func ask(number int, question string) int { var input string fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question) fmt.Scan(&input)

if question == input {
    // 問題文の単語と入力値が一致するときの処理を追加してください
    fmt.Println("正解!")
    return 10

} else {
    // 問題文の単語と入力値が一致しないときの処理を追加してください
    fmt.Println("不正解!")
    return 0

}

}


###ターミナルには以下のように表示される。
こんにちわ 世界


----------------------------------------
##10. 関数に値を渡すときの注意点(1)


package main

import "fmt"

func main() { totalScore := 0 ask(1, "dog") ask(2, "cat") ask(3, "fish")

fmt.Println("スコア", totalScore)

}

func ask(number int, question string) { var input string fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question) fmt.Scan(&input)

if question == input {
    fmt.Println("正解!")
    // totalScoreに10を加算代入してください
    totalScore += 10

} else {
    fmt.Println("不正解!")
}

}

###ターミナルには以下のように表示される。
error22


----------------------------------------
##11. 関数に値を渡すときの注意点(2)

package main

import "fmt"

func main() { totalScore := 0 ask(1, "dog", totalScore) ask(2, "cat", totalScore) ask(3, "fish", totalScore)

fmt.Println("スコア", totalScore)

}

// 引数としてint型のtotalScoreを追加してください func ask(number int, question string, totalScore int) { var input string fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question) fmt.Scan(&input)

if question == input {
    fmt.Println("正解!")
    totalScore += 10
} else {
    fmt.Println("不正解!")
}

}



----------------------------------------

ruby言語の基礎入門とruby on railsの触りについて解説


Ruby 学習コース I

  1. if文
  2. 真偽値・比較演算子(1)
  3. 比較演算子(2)
  4. else
  5. elsif
  6. 条件を組み合わせよう 課題にチャレンジしよう
  7. 総合課題

  1. if文

score = 92

条件式を「score > 80」とするif文をつくってください

if score > 80 puts "よくできました" end

よくできました


  1. 真偽値・比較演算子(1)

score = 80

「score > 80」を出力してください

puts score > 80

「score <= 80」を出力してください

puts score <= 80

scoreの値が80以下の場合に、「がんばりましょう」と出力してください

if score <= 80 puts "がんばりましょう" end


  1. 比較演算子(2)

score = 100

scoreの値が100の場合、「満点です」と出力してください

if score == 100 puts "満点です" end

scoreの値が100でない場合、「満点ではありません」と出力してください

if score != 100 puts "満点ではありません"

end

  1. else

score = 60

条件式が成り立たない場合に「がんばりましょう」と出力されるように書き換えてください

if score > 80 puts "よくできました" else puts "がんばりましょう" end


  1. elsif

score = 73

scoreの値が60より大きい場合に「まずまずです」と出力されるように書き換えてください

if score > 80 puts "よくできました" elsif score > 60 puts "まずまずです" else puts "がんばりましょう" end


  1. 条件を組み合わせよう

score = 96

「95以上かつ99以下」の場合のif文を作ってください

if score >= 95 && score <= 99 puts "高得点です!次は満点を目指しましょう。"

end

課題にチャレンジしよう 18. 総合課題

number = 48

条件分岐を作成してください

if number % 3 == 0 && number % 5 == 0 puts "15の倍数です" elsif number % 5 == 0 puts "5の倍数です" elsif number % 3 == 0 puts "3の倍数です" else puts "3の倍数でも5の倍数でもありません" end



Ruby 学習コース II コース詳細へ 配列と繰り返し 1. 配列とは 2. 配列を使ってみよう 3. each文 4. 変数の使える範囲 ハッシュとシンボル 5. ハッシュとは 6. ハッシュを使ってみよう 7. シンボルとは 8. ハッシュのキーの書き方 nilと様々な配列 9. nilとは 10. if nil 11. 要素がハッシュである配列(1) 12. 要素がハッシュである配列(2) 13. 要素がハッシュである配列(3) 課題にチャレンジしよう 14. 総合課題(1)

15. 総合課題(2)

Ruby 学習コース II コース詳細へ 配列と繰り返し


1. 配列とは

変数languagesに、複数の文字列を要素に持つ配列を代入してください

languages = ["日本語", "英語", "スペイン語"]

変数languagesを出力してください

puts languages


2. 配列を使ってみよう

languages = ["日本語", "英語", "スペイン語"]

インデックス番号が1の要素を出力してください

puts languages[1]

インデックス番号が0の要素を使って出力してください

puts "#{languages[0]}を話せます"


3. each文

languages = ["日本語", "英語", "スペイン語"]

each文を用いて、要素ごとに「○○を話せます」と出力してください

languages.each do |language| puts "#{language}を話せます" end


4. 変数の使える範囲

ハッシュも1つの値なので、配列と同様に、変数に代入することができます。 図のように、「puts user」とすると、定義したハッシュがそのまま出力されます。

languages = ["日本語", "英語", "スペイン語"] border = "---------------------"

languages.each do |language| # 変数borderを出力してください puts border puts "#{language}を話せます" end

以下のコードを削除してください


5. ハッシュとは

ハッシュの各要素の値は、対応するキーを使って、ハッシュ[キー]とすることで用いることができます。 図のように、user["name"]とすると、ハッシュuserのキー「"name"」と対応している値を用いることができます。

変数examにハッシュを代入してください

exam = {"subject" => "Math", "score" => 80}

変数examを出力してください

puts exam


6. ハッシュを使ってみよう

exam = {"subject" => "Math", "score" => 80}

キー「"subject"」の値を出力してください

puts exam["subject"]

キー「"subject"」の値を「"Science"」に更新してください

exam["subject"] = "Science"

もう一度、キー「"subject"」の値を出力してください

puts exam["subject"]

キーが「"grade"」、値が「"good"」の要素を追加してください

exam["grade"] = "good"

キー「"grade"」の値を出力してください

puts exam["grade"]


7. シンボルとは

ハッシュは以下の図のように、キーの部分を文字列ではなく、先頭にコロン「:」を付けた書き方をすることもできます。 この「:name」という書き方のことをシンボルと言います。

キーをシンボルで書き換えてください

exam = {:subject => "Math", :score => 80}

キー「:score」の値を出力してください

puts exam[:score]


8. ハッシュのキーの書き方

ハッシュのキーにシンボルを用いるときには、省略した書き方をすることができます。 具体的には「:key =>」を「key:」というように省略することができます

省略した書き方で書き換えてください

exam = {:subject => "Math", :score => 80}

exam = {subject: "Math", score: 80}

puts "#{exam[:subject]}: #{exam[:score]}点"


nilと様々な配列

  1. nilとは

では、ハッシュに存在しないキーを指定すると、値はどうなるでしょうか。 左の図で、存在しない「:weight」というキーの値を表示しようとした場合、 右の図のようになにも表示されません。これは「user[:weight]」の値が「何もない」ためです。

exam = {subject: "Math", score: 80}

キー「:grade」の値を出力してください

puts exam[:grade]

nilを出力してください

puts nil


10. if nil

exam = {subject: "Math"}

条件式にキー「:score」の値を使うif文をつくってください

if exam[:score] puts "#{exam[:subject]}の結果は#{exam[:score]}点です" else puts "#{exam[:subject]}の結果は分かりません" end


11. 要素がハッシュである配列(1)

配列の要素には、先頭からインデックス番号が割り振られていることを思い出してください。 図のような配列では、配列の値がハッシュなので、配列[インデックス番号]で対応するハッシュを用いることができます。

要素がハッシュの配列を作成してください

exams = [ {subject: "Math", score: 80}, {subject: "Science", score: 55} ]

インデックス番号が1の要素の値を出力してください

puts exams[1]

ターミナル出力 exams => {subject: "Science", score: 55}


12. 要素がハッシュである配列(2)

exams = [ {subject: "Math", score: 80}, {subject: "Science", score: 55} ]

インデックス番号が1の要素の、キーが「:score」の値を出力してください

puts exams[1][:score]

ターミナル出力 55


13. 要素がハッシュである配列(3)

課題にチャレンジしよう

exams = [ {subject: "Math", score: 80}, {subject: "Science", score: 55} ]

each文を用いて、要素ごとに「○○の結果は△△点です」と出力してください

exams.each do |exam| puts "#{exam[:subject]}の結果は#{exam[:score]}点です" end


14. 総合課題(1)

eachを用いて、変数 characters のすべての要素に対して繰り返し処理を実行できるようにしてください。 ただし、それぞれの要素は変数 character に代入されるようにしてください。

each文の中で、

と 名前は◯◯です を出力してください。 ただし○○の部分には、要素のキー :name の値を入れてください。

characters = [ {name: "にんじゃわんこ", age: 14}, {name: "ひつじ仙人"}, {name: "ベイビーわんこ", age: 5}, {name: "とりずきん"} ]

each文でそれぞれのキャラクターの名前を表示してください

characters.each do |character| puts "--------------------" puts "名前は#{character[:name]}です" end


15. 総合課題(2)

if, elseを用いて以下の条件分岐を作成してください。

・キー :age の値があるときは、 年齢は◯◯歳です と出力する。 ただし◯◯の部分には、キー:ageの値を入れる。

・キー:ageの値がないときは、 年齢は秘密です と出力する。

characters = [ {name: "にんじゃわんこ", age: 14}, {name: "ひつじ仙人"}, {name: "ベイビーわんこ", age: 5}, {name: "とりずきん"} ]

characters.each do |character| puts "--------------------" puts "名前は#{character[:name]}です"

# キー:ageの値に応じて年齢の情報を出力してください if character[:age] puts "年齢は#{character[:age]}歳です" else puts "年齢は秘密です" end end



Ruby 学習コース III コース詳細へ メソッドを学ぼう 1. メソッドとは 2. メソッドを自作しよう 引数 3. 引数とは 4. 引数を使いこなそう 5. メソッド定義のスコープ 6. 複数の引数 戻り値 7. 戻り値とは 8. 様々な戻り値 9. 複数の戻り値 キーワード引数

10. キーワード引数

  1. メソッドとは

def introduce puts "こんにちは" puts "私はにんじゃわんこです"

# 出力を追加してください puts "14歳です" end

puts "-----自己紹介-----"

introduceメソッドを呼び出してください

introduce

ターミナル出力 -----自己紹介----- こんにちは 私はにんじゃわんこです

14歳です

2. メソッドを自作しよう

print_infoメソッドを定義してください

def print_info puts "わんこでんきへようこそ!" puts "今日はヘッドホンがセール中です!" end

print_infoメソッドを呼び出してください

print_info


3. 引数とは

def introduce(name) puts "こんにちは" puts "私は#{name}です" end

引数を渡してメソッドを呼び出してください

introduce("にんじゃわんこ")

ターミナル出力 こんにちは" 私はにゃんじゃんわんこです


4. 引数を使いこなそう

print_infoメソッドを定義してください

def print_info(item) puts "わんこでんきへようこそ!" puts "今日は#{item}がセール中です!" end

引数を「ヘッドホン」としてメソッドを呼び出してください

print_info("ヘッドホン")

引数を「テレビ」としてメソッドを呼び出してください

print_info("テレビ")

【ターミナル出力】 わんこでんきへようこそ! 今日はヘッドホンがセール中です! わんこでんきへようこそ! 今日はテレビがセール中です!


5. メソッド定義のスコープ

Ruby 学習コースⅡで学んだ「スコープ」という言葉を覚えているでしょうか? スコープとは、その変数が使える範囲を指す言葉で、 引数のスコープはメソッドの中だけであると表現できます。

def print_info(item) puts "わんこでんきへようこそ!" puts "今日は#{item}がセール中です!" end

print_info("ヘッドホン")

以下のコードを削除してください


6. 複数の引数

引数は複数受け取ることもできます。括弧の中に受け取る引数をコンマ(,)で 区切って並べることで、複数の引数を指定することができます。 引数は、左から順番に「第1引数、第2引数」というように呼びます。

引数priceも受け取るように変更してください

def print_info(item, price) puts "わんこでんきへようこそ!" puts "今日は#{item}がセール中で#{price}円です!" end

print_infoメソッドを呼び出してください

print_info("SDカード", 1200)


7. 戻り値とは

def discount(price) # 「price / 2」を戻り値として返してください return price / 2 end

puts "テレビがセール中です!"

discountメソッドを呼び出し、その戻り値を変数half_priceに代入してください

half_price = discount(15000)

変数half_priceを用いて、「特別価格で〇〇円です」となるように出力してください

puts "特別価格で#{half_price}円です"

【ターミナル出力】 テレビがセール中です! 特別価格で7500円です


8. 様々な戻り値

shipping_free?メソッドを定義してください

def shipping_free?(price) return price >= 5000 end

if文の条件式でshipping_free?メソッドを呼び出してください

if shipping_free?(3000) puts "5000円以上のお買い上げなので送料はいただきません" else puts "追加で送料をいただきます" end

【ターミナル出力】 追加で送料をいただきます


9. 複数の戻り値

def price_with_shipping(price) # priceが5000以上のとき、戻り値としてpriceを返すif文を作成してください if price >= 5000 return price end

# priceに500を加えた値を戻り値として返してください return price + 500 end

puts "商品の合計金額は3000円です" puts "お支払い金額は、送料込みで#{price_with_shipping(3000)}円です" puts "-----------" puts "商品の合計金額は10000円です" puts "お支払い金額は、送料込みで#{price_with_shipping(10000)}円です"

【ターミナル出力】 商品の合計金額は3000円です お支払い金額は、送料込みで3500円です

商品の合計金額は10000円です お支払い金額は、送料込みで10000円です


10. キーワード引数

キーワード引数を使うように書き換えてください

def buy(item:, price:, count:) puts "#{item}を#{count}台のお買い上げです" puts "合計金額は#{price * count}円です" end

キーワード引数を使うように書き換えてください

buy(item: "テレビ", price: 15000, count: 2)

【ターミナル出力】 テレビを2台のお買い上げです 合計金額は30000円です"



Ruby 学習コース IV コース詳細へ クラスとインスタンス 1. 目標物を確認しよう 2. クラスの定義 3. インスタンス変数 4. インスタンスの生成 5. インスタンス変数を用いる 6. 複数のインスタンス インスタンスメソッド 7. メソッドを用いる 8. インスタンスメソッド 9. メソッドとインスタンス変数 10. クラスとインスタンスの復習 11. initializeメソッド(1) 12. initializeメソッド(2) 「料理注文システム」を作ろう 13. ファイルを分割する 14. メニューの一覧表示機能(1) 15. メニューの一覧表示機能(2) 16. 入力を受け取る 17. メニューの選択機能



1. 目標物を確認しよう

RubyⅣでは、コンソールで動かせる「料理注文システム」を作ります。

require "./menu"

menu1 = Menu.new(name: "ピザ", price: 800)
menu2 = Menu.new(name: "すし", price: 1000)
menu3 = Menu.new(name: "コーラ", price: 300)
menu4 = Menu.new(name: "お茶", price: 200)

menus = [menu1, menu2, menu3, menu4]

index = 0
menus.each do |menu|
  puts "#{index}. #{menu.info}"
  index += 1
end

puts "--------------"
puts "メニューの番号を選択してください"
order = gets.chomp.to_i

selected_menu = menus[order]
puts "選択されたメニュー: #{selected_menu.name}"

puts "個数を入力してください(3つ以上で100円割引)"
count = gets.chomp.to_i

puts "お会計は#{selected_menu.get_total_price(count)}円です"

2. クラスの定義

プログラミングでメニューという「もの」を生成するには、まずその「設計図」を用意する必要があります。 設計図のことをクラス、「もの」のことをインスタンスと呼びますので、覚えておきましょう。

Menuクラスを定義してください

class Menu end


3. インスタンス変数

情報を持たせるためには、「attr_accessor シンボル」のようにします。 以下の図のようにすることで、Menuクラスのインスタンスにnameという情報を持たせることができます。 また、この「name」という情報のことをインスタンス変数と呼びますので覚えておきましょう。

class Menu # nameとpriceというインスタンス変数を用意してください attr_accessor :name attr_accessor :price end


4. インスタンスの生成

クラス(設計図)を元に、新しくインスタンスを生成するには、「クラス名.new」とします。 また、「変数名 = クラス名.new」とすることで、生成したインスタンスを変数に代入することができます。

class Menu attr_accessor :name attr_accessor :price end

Menuクラスのインスタンスを生成して変数menu1に代入してください

menu1 = Menu.new


5. インスタンス変数を用いる

インスタンスに情報をもたせるには、クラスで用意したインスタンス変数に値を代入する必要があります。 具体的には「インスタンス.変数名 = 値」とすることで、そのインスタンス変数に値をセットすることができます。 また、「インスタンス.変数名」とすることで、そのインスタンス変数の値を用いることができます。

class Menu attr_accessor :name attr_accessor :price end

menu1 = Menu.new

menu1.name = "ピザ" puts menu1.name

menu1のpriceに「800」を代入してください

menu1.price = 800

menu1のpriceを出力してください

puts menu1.price

【ターミナル出力】 ピザ 800


6. 複数のインスタンス

class Menu attr_accessor :name attr_accessor :price end

menu1 = Menu.new

menu1.name = "ピザ" puts menu1.name

menu1.price = 800 puts menu1.price

Menuクラスのインスタンスを生成して変数menu2に代入してください

menu2 = Menu.new

menu2のnameに「すし」を代入してください

menu2.name = "すし"

menu2のnameを出力してください

puts menu2.name

menu2のpriceに「1000」を代入してください

menu2.price = 1000

menu2のpriceを出力してください

puts menu2.price

【ターミナル出力】 ピザ 800 すし 1000


7. メソッドを用いる

class Menu attr_accessor :name attr_accessor :price

# infoメソッドを定義してください def info puts "料理名と値段が表示されます" end end

menu1 = Menu.new menu1.name = "ピザ" menu1.price = 800

menu1に対してinfoメソッドを呼び出してください

menu1.info

【ターミナル出力】 料理名と値段が表示されます


8. インスタンスメソッド

インスタンスメソッドは、インスタンスに対して呼び出す、 ということ以外は「Ruby 学習コース Ⅲ」で学んだメソッドと同じです したがって、インスタンスメソッドも、引数を受け取ったり戻り値を返すことができます。

class Menu attr_accessor :name attr_accessor :price

def info # 文字列「料理名と値段が表示されます」をreturnしてください return "料理名と値段が表示されます" end end

menu1 = Menu.new menu1.name = "ピザ" menu1.price = 800

menu1に対してinfoメソッドを呼び出して戻り値を出力してください

puts menu1.info


9. メソッドとインスタンス変数

インスタンスメソッドの中では、特殊な変数「self」を用いて「self.変数名」とすることで、 インスタンス変数を扱うことができるようになります。 インスタンスメソッドでは、変数「self」に、呼び出したインスタンス自身が代入されています。

class Menu attr_accessor :name attr_accessor :price

def info # 「#{}」の中身を埋めてください return "#{self.name} #{self.price}円" end end

menu1 = Menu.new menu1.name = "ピザ" menu1.price = 800

puts menu1.info

【ターミナル出力】 ピザ 800円


10. クラスとインスタンスの復習

ここまで学んだことをいかして、メニューの合計金額を求めるメソッドをつくってみましょう。 購入数が3個以上の場合には、100円割引になるようにします。

class Menu attr_accessor :name attr_accessor :price

def info return "#{self.name} #{self.price}円" end

# get_total_priceメソッドを定義してください def get_total_price(count) total_price = self.price * count if count >= 3 total_price -= 100 end return total_price end end

menu1 = Menu.new menu1.name = "ピザ" menu1.price = 800

menu1に対してget_total_priceメソッドを呼び出してください

puts menu1.get_total_price(3)

【ターミナル出力】 2300円


11. initializeメソッド(1)

まずは、インスタンスを生成した直後に処理を実行することができる、initializeメソッドというものを学びましょう。 initializeメソッドは、「クラス名.new」でインスタンスを生成した直後に自動で呼び出されます。

class Menu attr_accessor :name attr_accessor :price

# initializeメソッドを定義してください def initialize self.name = "ピザ" self.price = 800 end

def info return "#{self.name} #{self.price}円" end

def get_total_price(count) total_price = self.price * count if count >= 3 total_price -= 100 end return total_price end end

menu1 = Menu.new

menu1に対してinfoメソッドを呼び出して戻り値を出力してください

puts menu1.info

【ターミナル出力】 ピザ 800円


12. initializeメソッド(2)

initializeメソッドは通常のインスタンスメソッドと同じように、引数を渡すこともできます。 その際、「クラス.new」に対して引数を渡すことで、initializeメソッドにその値を渡すことができます。

class Menu attr_accessor :name attr_accessor :price

# initializeメソッドを書き換えてください def initialize(name:, price:) self.name = name self.price = price end

def info return "#{self.name} #{self.price}円" end

def get_total_price(count) total_price = self.price * count if count >= 3 total_price -= 100 end return total_price end end

引数を渡してインスタンスを生成してください

menu1 = Menu.new(name: "すし", price: 1000)

puts menu1.info

【ターミナル出力】

すし 1000円

13. ファイルを分割する

# Menuクラスをmenu.rbに移動して、このファイルからは削除してください
# Menuクラスを削除したら、menu.rbを読み込んでください
require "./menu"

# 以下のコードは移動させないでください
menu1 = Menu.new(name: "すし", price: 1000)

puts menu1.info

【ターミナル出力】

すし 1000円

14. メニューの一覧表示機能(1)

require "./menu"

menu1 = Menu.new(name: "ピザ", price: 800)
menu2 = Menu.new(name: "すし", price: 1000)
menu3 = Menu.new(name: "コーラ", price: 300)
menu4 = Menu.new(name: "お茶", price: 200)

# 変数menusを定義して配列を代入してください
menus = [menu1, menu2, menu3, menu4]

# menusに対して繰り返し処理を実行してください
menus.each do |menu|
  puts menu.info
end

15. メニューの一覧表示機能(2)

それぞれのメニューに番号をつけて一覧表示してみましょう。 index.rb each文より前で、変数 index を定義し、数値の 0 を代入してください。 スライドで確認 index.rb each文の中で以下の処理を実行してください。 ・menu.infoの代わりに、 "#{index}. #{menu.info}" を出力する ・変数indexの値に1を加える

require "./menu"

menu1 = Menu.new(name: "ピザ", price: 800) menu2 = Menu.new(name: "すし", price: 1000) menu3 = Menu.new(name: "コーラ", price: 300) menu4 = Menu.new(name: "お茶", price: 200)

menus = [menu1, menu2, menu3, menu4]

変数indexを定義して「0」を代入してください

index = 0

menus.each do |menu| # 番号をつけてメニューの内容が出力されるように書き換えてください puts "#{index}. #{menu.info}"

# 変数indexに1を加えて値を更新してください index += 1 end

【ターミナル出力】 0.ピザ", price: 800 1.すし", price: 1000 2.コーラ", price: 300 3.お茶", price: 200


16. 入力を受け取る

今回は目標物の「料理注文システム」から一旦離れて、gets.chompの使い方をマスターしましょう。 index.rb gets.chompを用いて、変数 name に、入力された文字列を代入してください。 スライドで確認 index.rb ○○さん、いらっしゃいませ となるように出力してください。このとき、○○の部分には、変数nameの値を入れてください。 数値を受け取る場合も確認してみましょう。 index.rb gets.chomp.to_iを用いて、変数 count に、入力された文字列を数値に変換した値を代入してください。 スライドで確認 index.rb 変数 total_price を定義し、100とcountの値を掛けた値を代入してください。 index.rb お会計は○○円です となるように出力してください。このとき、○○の部分には、変数total_priceの値を入れてください。

puts "名前を入力してください"

入力を受け取って変数nameに代入してください

name = gets.chomp

「○○さん、いらっしゃいませ」となるように出力してください

puts "#{name}さん、いらっしゃいませ"

puts "1つ100円のお菓子があります" puts "いくつ買いますか?"

入力を数値として受け取って変数countに代入してください

count = gets.chomp.to_i

変数total_priceに「100 * count」を代入してください

total_price = 100 * count

「お会計は○○円です」となるように出力してください

puts "お会計は#{total_price}円です"


17. メニューの選択機能

料理注文システム」を完成させましょう! 少し演習が多いですが、1つずつ指示にしたがって進めていきましょう。 index.rb 入力を数値として受け取り、変数 order に代入してください。 スライドで確認 index.rb 変数 selected_menu を定義し、配列menusのインデックス番号が変数orderの値である要素を代入してください。 スライドで確認 index.rb 選択されたメニュー: ○○ となるように出力してください。このとき、○○の部分には、変数selected_menuのnameの値を入れてください。 選択されたメニューが取り出せたら、個数の入力も受け取って、会計の金額を出力しましょう。 index.rb 変数 count を定義し、受け取った入力の値を数値に変換して代入してください。 スライドで確認 index.rb お会計は○○円です となるように出力してください。このとき、○○の部分には、get_total_priceメソッドに引数countを渡して呼び出したときの戻り値を入れてください。

require "./menu"

menu1 = Menu.new(name: "ピザ", price: 800)
menu2 = Menu.new(name: "すし", price: 1000)
menu3 = Menu.new(name: "コーラ", price: 300)
menu4 = Menu.new(name: "お茶", price: 200)

menus = [menu1, menu2, menu3, menu4]

index = 0
menus.each do |menu|
  puts "#{index}. #{menu.info}"
  index += 1
end

puts "--------------"
puts "メニューの番号を選択してください"

# 入力を数値として受け取って変数orderに代入してください
order = gets.chomp.to_i

# 選択されたメニューのインスタンスを変数selected_menuに代入してください
selected_menu = menus[order]

# 「選択されたメニュー: ○○」となるように出力してください
puts "選択されたメニュー: #{selected_menu.name}"

puts "個数を入力してください(3つ以上で100円割引)"

# 入力を数値として受け取って変数countに代入してください
count = gets.chomp.to_i

# 「お会計は○○円です」となるように出力してください
puts "お会計は#{selected_menu.get_total_price(count)}円です"

Ruby 学習コース V コース詳細へ 継承 1. 目標物を確認しよう 2. 継承とは 3. 継承のしくみ 4. インスタンス変数の追加 5. インスタンスメソッドの追加 6. 「料理注文システム」の復習 7. オーバーライド(1) 8. オーバーライド(2) 9. super 10. オーバーライドの復習 Dateクラスとクラスメソッド 11. Dateクラスの使い方(1) 12. Dateクラスの使い方(2) 13. クラスメソッドの定義 14. クラスメソッドの処理

15. クラスメソッドの呼び出し



1. 目標物を確認しよう

食べ物の場合には「カロリー」が、飲み物の場合には「容量」が表示されていることを確かめてみましょう。 また、今日が日曜日の場合には100円引きになるようになっています。

require "./food" require "./drink"

puts "日曜限定100円割引セール実施中!"

food1 = Food.new(name: "ピザ", price: 800, calorie: 700) food2 = Food.new(name: "すし", price: 1000, calorie: 600) drink1 = Drink.new(name: "コーラ", price: 300, amount: 500) drink2 = Drink.new(name: "お茶", price: 200, amount: 400)

menus = [food1, food2, drink1, drink2]

index = 0 menus.each do |menu| puts "#{index}. #{menu.info}" index += 1 end

puts "--------------" puts "メニューの番号を選択してください" order = gets.chomp.to_i

selected_menu = menus[order] puts "選択されたメニュー: #{selected_menu.name}"

puts "個数を入力してください(3つ以上で100円割引)" count = gets.chomp.to_i

puts "お会計は#{selected_menu.get_total_price(count)}円です"

require "date"

class Menu attr_accessor :name attr_accessor :price

def initialize(name:, price:) self.name = name self.price = price end

def info return "#{self.name} #{self.price}円" end

def get_total_price(count) total_price = self.price * count if count >= 3 total_price -= 100 end

if count >= 1 && Menu.is_discount_day?
  total_price -= 100
end

return total_price

end

def Menu.is_discount_day? today = Date.today return today.sunday? end end

require "./menu"

class Food < Menu attr_accessor :calorie

def initialize(name:, price:, calorie:) super(name: name, price: price) self.calorie = calorie end

def info return "#{self.name} #{self.price}円 (#{self.calorie}kcal)" end

def calorie_info return "#{self.name}は#{self.calorie}kcalです" end end

require "./menu"

class Drink < Menu attr_accessor :amount

def initialize(name:, price:, amount:) super(name: name, price: price) self.amount = amount end

def info return "#{self.name} #{self.price}円 (#{self.amount}mL)" end end


2. 継承とは

requireを使ってmenu.rbを読み込んでください

require "./menu"

Menuクラスを継承したFoodクラスをつくってください

class Food < Menu end

requireを使ってmenu.rbを読み込んでください

require "./menu"

Menuクラスを継承したDrinkクラスをつくってください

class Drink < Menu end


3. 継承のしくみ

継承をすると、子クラスは親クラスのインスタンス変数とインスタンスメソッドを引き継ぎます。 図のようにFoodクラスのインスタンスは、Menuクラスのインスタンス変数やインスタンスメソッドを呼び出すことが出来ます。

requireを使ってfood.rbとdrink.rbを読み込んでください

require "./food" require "./drink"

Foodクラスのインスタンスを生成して変数food1に代入してください

food1 = Food.new(name: "ピザ", price: 800)

food1に対してinfoメソッドを呼び出して戻り値を出力してください

puts food1.info

Drinkクラスのインスタンスを生成して変数drink1に代入してください

drink1 = Drink.new(name: "コーラ", price: 300)

drink1に対してinfoメソッドを呼び出して戻り値を出力してください

puts drink1.info


4. インスタンス変数の追加

require "./food" require "./drink"

food1 = Food.new(name: "ピザ", price: 800) drink1 = Drink.new(name: "コーラ", price: 300)

food1.calorieに「700」を代入してください

food1.calorie = 700

food1.calorieを出力してください

puts food1.calorie

drink1.amountに「500」を代入してください

drink1.amount = 500

drink1.amountを出力してください

puts drink1.amount

require "./menu"

class Food < Menu # calorieというインスタンス変数を追加してください attr_accessor :calorie
end

require "./menu"

class Drink < Menu # amountというインスタンス変数を追加してください attr_accessor :amount end


5. インスタンスメソッドの追加

require "./food"
require "./drink"

food1 = Food.new(name: "ピザ", price: 800)
food1.calorie = 700

# food1に対してcalorie_infoメソッドを呼び出して戻り値を出力してください
puts food1.calorie_info
require "./menu"

class Food < Menu
  attr_accessor :calorie
  
  # calorie_infoメソッドを定義してください
  def calorie_info
    return "#{self.name}は#{self.calorie}kcalです"
  end
end

6. 「料理注文システム」の復習

# food.rbとdrink.rbを読み込むように書き換えてください
require "./food"
require "./drink"

# food1とfood2をFoodクラスのインスタンスに書き換えてください
food1 = Food.new(name: "ピザ", price: 800)
food2 = Food.new(name: "すし", price: 1000)
# drink1とdrink2をDrinkクラスのインスタンスに書き換えてください
drink1 = Drink.new(name: "コーラ", price: 300)
drink2 = Drink.new(name: "お茶", price: 200)

menus = [food1, food2, drink1, drink2]

index = 0
menus.each do |menu|
  puts "#{index}. #{menu.info}"
  index += 1
end

puts "--------------"
puts "メニューの番号を選択してください"
order = gets.chomp.to_i

selected_menu = menus[order]
puts "選択されたメニュー: #{selected_menu.name}"

puts "個数を入力してください(3つ以上で100円割引)"
count = gets.chomp.to_i

puts "お会計は#{selected_menu.get_total_price(count)}円です"

7. オーバーライド(1)

food1とfood2のインスタンスにはすでにインスタンス変数calorieの値が代入され、drink1とdrink2のインスタンスにはすでにインスタンス変数amountの値が代入されています。 infoメソッドをオーバーライドして、追加した情報を出力するようにしましょう。 food.rb Foodクラスの中で、infoメソッドを定義してください。 スライドで確認 food.rb infoメソッドの中で、 ○○ △△円 (□□kcal) というような文字列を戻り値として返してください。 ただし、記号の部分は、以下に示すインスタンス変数の値を入れてください。 ・○○: name

・△△: price

・□□: calorie 同じように、Drinkクラスでもinfoメソッドをオーバーライドしましょう。 drink.rb Drinkクラスの中で、infoメソッドを定義してください。 スライドで確認 drink.rb infoメソッドの中で、 ○○ △△円 (□□mL) というような文字列を戻り値として返してください。 ただし、記号の部分は、以下に示すインスタンス変数の値を入れてください。 ・○○: name

・△△: price

・□□: amount

require "./menu"

class Food < Menu
  attr_accessor :calorie
  
  # infoメソッドを定義してください
  def info
    return "#{self.name} #{self.price}円 (#{self.calorie}kcal)"
  end
  
  def calorie_info
    return "#{self.name}は#{self.calorie}kcalです"
  end
end
require "./menu"

class Drink < Menu
  attr_accessor :amount
  
  # infoメソッドを定義してください
  def info
    return "#{self.name} #{self.price}円 (#{self.amount}mL)"
  end
end

8. オーバーライド(2)

require "./food"
require "./drink"

# Food.newの引数を書き換えてください
food1 = Food.new(name: "ピザ", price: 800, calorie: 700)

food2 = Food.new(name: "すし", price: 1000, calorie: 600)

drink1 = Drink.new(name: "コーラ", price: 300)
drink1.amount = 500
drink2 = Drink.new(name: "お茶", price: 200)
drink2.amount = 400

menus = [food1, food2, drink1, drink2]

index = 0
menus.each do |menu|
  puts "#{index}. #{menu.info}"
  index += 1
end

puts "--------------"
puts "メニューの番号を選択してください"
order = gets.chomp.to_i

selected_menu = menus[order]
puts "選択されたメニュー: #{selected_menu.name}"

puts "個数を入力してください(3つ以上で100円割引)"
count = gets.chomp.to_i

puts "お会計は#{selected_menu.get_total_price(count)}円です"
require "./menu"

class Food < Menu
  attr_accessor :calorie
  
  # initializeメソッドを定義してください
  def initialize(name:, price:, calorie:)
    self.name = name
    self.price = price
    self.calorie = calorie
  end
  
  def info
    return "#{self.name} #{self.price}円 (#{self.calorie}kcal)"
  end
  
  def calorie_info
    return "#{self.name}は#{self.calorie}kcalです"
  end
end

9. super

superを使って、処理の共通部分をまとめてみましょう。 food.rb initializeメソッドの中でsuperを呼び出してください。ただし、引数は以下のキーワード引数を渡してください。 ・name: 引数nameの値 ・price: 引数priceの値 スライドで確認 food.rb initializeメソッドの中でインスタンス変数nameとpriceに値を代入している部分を削除してください。

require "./menu"

class Food < Menu attr_accessor :calorie

def initialize(name:, price:, calorie:) # superを使って書き換えてください super(name: name, price: price)

self.calorie = calorie

end

def info return "#{self.name} #{self.price}円 (#{self.calorie}kcal)" end

def calorie_info return "#{self.name}は#{self.calorie}kcalです" end end


10. オーバーライドの復習

drink.rb Drinkクラスの中で、initializeメソッドを定義してください。ただし、引数は以下のキーワード引数を受け取るようにしてください。 ・ name

・ price

・ amount スライドで確認 drink.rb initializeメソッドの中で、superを呼び出してください。ただし、引数は以下のキーワード引数を渡してください。 ・name: 引数nameの値 ・price: 引数priceの値 スライドで確認 drink.rb initializeメソッドの中で、インスタンス変数amountに、引数amountの値を代入してください。 initializeメソッドをオーバーライドしたので、Drink.newの引数を追加しましょう。 index.rb ・drink1に代入しているDrink.newの引数に、以下のキーワード引数を追加してください。 amount: 500

・drink1のインスタンス変数 amountに値を代入している部分を削除してください。 index.rb ・drink2に代入しているDrink.newの引数に、以下のキーワード引数を追加してください。 amount: 400

・drink2のインスタンス変数 amountに値を代入している部分を削除してください。

require "./menu"

class Drink < Menu attr_accessor :amount

# initializeメソッドを定義してください def initialize(name:, price:, amount:) super(name: name, price: price) self.amount = amount end

def info return "#{self.name} #{self.price}円 (#{self.amount}mL)" end end

require "./food" require "./drink"

food1 = Food.new(name: "ピザ", price: 800, calorie: 700) food2 = Food.new(name: "すし", price: 1000, calorie: 600)

Drink.newの引数を書き換えてください

drink1 = Drink.new(name: "コーラ", price: 300, amount: 500)

drink2 = Drink.new(name: "お茶", price: 200, amount: 400)

menus = [food1, food2, drink1, drink2]

index = 0 menus.each do |menu| puts "#{index}. #{menu.info}" index += 1 end

puts "--------------" puts "メニューの番号を選択してください" order = gets.chomp.to_i

selected_menu = menus[order] puts "選択されたメニュー: #{selected_menu.name}"

puts "個数を入力してください(3つ以上で100円割引)" count = gets.chomp.to_i

puts "お会計は#{selected_menu.get_total_price(count)}円です"


11. Dateクラスの使い方(1)

日付を扱うためには、Dateクラスというものを用います。 DateクラスとはRubyがすでに用意しているクラスで、図のようにrequireを用いて読み込むことで、自分でクラスを定義しなくても使うことができます。 このようにすでに用意されているクラスは、requireの書き方が少し異なるので注意しましょう。

requireを用いて、Dateクラスを読み込んでください

require "date"

変数birthdayに、Dateクラスのインスタンスを代入してください

birthday = Date.new(1996, 3, 1)

変数birthdayをputsしてください

puts birthday

変数birthdayにsunday?メソッドを用いた結果をputsしてください

puts birthday.sunday?


12. Dateクラスの使い方(2)

require "date"

変数todayに、Date.todayの戻り値を代入してください

today = Date.today

変数todayをputsしてください

puts today

変数todayに対してsunday?メソッドを用いた結果をputsしてください

puts today.sunday?


13. クラスメソッドの定義

class Menu attr_accessor :name attr_accessor :price

def initialize(name:, price:) self.name = name self.price = price end

def info return "#{self.name} #{self.price}円" end

def get_total_price(count) total_price = self.price * count if count >= 3 total_price -= 100 end return total_price end

# クラスメソッド「is_discount_day?」を定義してください def Menu.is_discount_day? end end


14. クラスメソッドの処理

requireを用いて、Dateクラスを読み込んでください

require "date"

class Menu attr_accessor :name attr_accessor :price

def initialize(name:, price:) self.name = name self.price = price end

def info return "#{self.name} #{self.price}円" end

def get_total_price(count) total_price = self.price * count if count >= 3 total_price -= 100 end return total_price end

def Menu.is_discount_day? # 日曜日であればtrue、そうでなければfalseを返してください today = Date.today return today.sunday? end end


15. クラスメソッドの呼び出し

require "./food" require "./drink"

puts "日曜限定100円割引セール実施中!"

food1 = Food.new(name: "ピザ", price: 800, calorie: 700) food2 = Food.new(name: "すし", price: 1000, calorie: 600) drink1 = Drink.new(name: "コーラ", price: 300, amount: 500) drink2 = Drink.new(name: "お茶", price: 200, amount: 400)

menus = [food1, food2, drink1, drink2]

index = 0 menus.each do |menu| puts "#{index}. #{menu.info}" index += 1 end

puts "--------------" puts "メニューの番号を選択してください" order = gets.chomp.to_i

selected_menu = menus[order] puts "選択されたメニュー: #{selected_menu.name}"

puts "個数を入力してください(3つ以上で100円割引)" count = gets.chomp.to_i

puts "お会計は#{selected_menu.get_total_price(count)}円です"

require "date"

class Menu attr_accessor :name attr_accessor :price

def initialize(name:, price:) self.name = name self.price = price end

def info return "#{self.name} #{self.price}円" end

def get_total_price(count) total_price = self.price * count if count >= 3 total_price -= 100 end

# if文を作成してください
if count >= 1 && Menu.is_discount_day?
  total_price -= 100
end

return total_price

end

def Menu.is_discount_day? today = Date.today return today.sunday? end end

require "./menu"

class Food < Menu attr_accessor :calorie

def initialize(name:, price:, calorie:) super(name: name, price: price) self.calorie = calorie end

def info return "#{self.name} #{self.price}円 (#{self.calorie}kcal)" end

def calorie_info return "#{self.name}は#{self.calorie}kcalです" end end

require "./menu"

class Drink < Menu attr_accessor :amount

def initialize(name:, price:, amount:) super(name: name, price: price) self.amount = amount end

def info return "#{self.name} #{self.price}円 (#{self.amount}mL)" end end



railsを学べる学習サイト一覧

超初級: progate! https://prog-8.com/languages/rails5

初級: paizaラーニング! https://paiza.jp/works/rails/primer/beginner-rails1

中級: railsチュートリアル https://railstutorial.jp/chapters/beginning?version=5.1

ゲームアプリ開発者に有効なudemyコース集一覧

最近、個人開発に役立つ有用な動画教材が増えてきました。 なのでここでumdeyで 役立つ動画教材をまとめてみます。

kotolinアプリ開発コース

【ゼロからのAndroid☓Kotlin】一番やさしいAndroidアプリ開発入門<初級編・みんプロ式> https://www.udemy.com/course/androidkotlin/ 北川 博之 (みんなのプログラミング by Telulu LLC)

【ゼロからのFlutter】iOS/Androidアプリを"いっぺんに"開発入門・初級編<みんプロ式> プログラミング経験一切不要!これ一本でiOS/Androidアプリが一度に作れる開発ツール「Flutter」の基礎がゼロから身につく完全初心者向けプログラム。はじめてのプログラミングからアプリリリースまでを完全網羅!解説資料・ソースコードhttps://www.udemy.com/course/flutter-ios-android/

Android☓Kotlin2|中級1】フラグメント・マテリアルデザイン・RecyclerViewの基礎<みんプロ式> KotlinでAndroidのより高度な機能を習得する中級編第1弾!Todoアプリを作ってマテリアルデザイン/フラグメント/複雑なリスト/多言語・タブレット対応等のスキルを習得!Android Studio3.0にも対応、スライド・コード付 https://www.udemy.com/course/androidkotlin2/

Android☓Kotlin7|ネオ中級2】Web通信(Retrofit)/非同期処理(コルーチン)/Roomの基礎 Androidアプリ開発における非同期処理の新標準「Kotlinコルーチン」/「Retrofit」を使ったHTTP通信の基礎/Google公式のDBライブラリ「Room」の使い方等を習得するネオ中級編第2弾!AS3.5完全対応。 https://www.udemy.com/course/androidkotlin7/

swiftアプリ開発コース

【最新版】Tinder風Musicリストアプリを作成しよう! https://www.udemy.com/course/ios13_xcode11_tinder/

【Watson性格診断】マッチングアプリに最適な人間の性格、趣味嗜好をチャートにしよう!【Swift5.x対応】 人工知能(コグニティブ・コンピューティング)Watsonを用いて、テキストから人物の性格(ビックファイブ)、購買傾向、映画・音楽のジャンル別趣味嗜好、買い物にはクレジットカードを使用するか、衝動買い傾向はあるかなどをチャートにします! https://www.udemy.com/course/watsonswift5_big5/

【iOS13対応】未経験者がiPhoneアプリ開発者になるための全て iOS Boot Camp 最新のXcode11、Swift5対応のこのコースで、基礎的で簡単なアプリから実務で必要なMVCモデル、クラスの概念、API連携、XML解析、JSON解析、チャット、SNS、アプリ内広告、アプリ内課金などを一緒に学び転職、就職を目指します! https://www.udemy.com/course/ios13_swift5_iphone_ios_boot_camp/

【Xcode11+Git】チーム開発の基礎とLike機能を用いた写真SNS開発を学ぼう! SNSによくあるLIKE機能をきれいなアニメーションで開発後、チーム開発で必要なGit要素をXcodeから使用できるようになり、Merge、Push、Fork、Pull Request、Clone、Branchなどについて学びます。 https://www.udemy.com/course/xcode11_github_likesystem/

【Swift5対応】自動更新型ニュースアプリと名刺管理アプリを学ぼう! ご自身のアプリにすぐに導入できる、スマートニュース風タブUI、自動更新のXML解析の方法、アプリから名刺などを自動スキャンして、Firebaseへデータを送受信する方法、最新のGoogleAdmobの方法に関して学びます。 https://www.udemy.com/course/swift5_xcode_news/

SwiftとXcodeの基本を完全マスター 絶対に挫折しないiPhoneアプリ開発講座 Swift4, Xcode9対応 プログラミングの過程をレクチャーつきで完全録画。実際に手を動かしてiPhoneアプリをつくろう。 https://www.udemy.com/course/iphone-swift4-xcode9/

React Native

React Native で iOS / Android アプリ開発をゼロから始めよう!● React Native を使ったアプリ開発の初学者向け講座です。アプリ開発の全行程を一気に身につけましょう! https://www.udemy.com/course/react-native-ios-android/

React Native入門:ニュースアプリを作りながら覚えよう/Hooks対応 2020年版 Webの開発経験はあるけどアプリの開発は初めてという方、エンジニアになりたての人にお薦めのReact Native入門講座。 2019年に導入されたHooksの記法にも対応。React Native現場歴3年の講師が基礎から丁寧に解説します。 https://www.udemy.com/course/react-native-first-step/

unityゲーム開発コース

Unity ゲーム開発:インディーゲームクリエイターが教える C#の基礎からゲームリリースまで 【スタジオしまづ】 初心者OK!C#を使って複雑なGameを自分で開発しよう。 コースの終わりにはオリジナルRPGApp StoreGoogle Playでリリースしよう!!! https://www.udemy.com/course/studio_shimazu_nfrpg/

Unity ゲーム開発入門:インディーゲームクリエイターが教えるマリオのようなゲームを作成する方法 【スタジオしまづ】 2Dアクションゲーム開発に必要な、C#・アニメーション・当たり判定など総合的なUnityの力がこれ一本で身につく 完全攻略版。 自分の Gameを世界に向けて発信しよう! https://www.udemy.com/course/studio_shimazu_sideview_action/

Unityインストラクターが教えるシャドウバースのような本格2Dカードゲーム開発コース 【スタジオしまづ】 C#経験者や中級ゲーム開発者に送る究極のカードゲーム開発コース。 難易度が高いと言われるカードゲームを実践的なコーディングスキルを交えて紹介。 日本語では全く見つからなかったカードゲームのテクニックがここに集約! https://www.udemy.com/course/unity2d-card-game/

[初心者向け] Blender 2.8でアニメーションを作成して Unity で動かすまでの30分講座 https://www.udemy.com/course/studio_shimazu_blender0/

Unity超簡単!ターン制対戦ゲームが作れる6つのテクニック https://www.udemy.com/course/studio_shimazu_unity_0/

Unity超簡単!3Dアクションゲームが作れる6つのテクニック https://www.udemy.com/course/studio_shimazu_unity_1/

Unity 超簡単!56分で出来るカードゲームの作り方 https://www.udemy.com/course/studio_shimazu_unity_2/

flutter環境構築(Windows編)


1. Windows の環境構築をしよう

  1. Flutter SDK をダウンロード まずは Flutter SDK を公式 HP からダウンロードします。下記 URL にアクセスし、Flutter SDK をダウンロードしましょう。

docs.flutter.dev

ダウンロードしたファイルを Zip 形式になっているので解凍した上で、Local Disk 直下の開発用フォルダに配置してください

ここでは sdk という名前でフォルダを作成し、その直下に解凍した flutter フォルダを配置しています

  1. PATH を通す コマンドラインから flutter フォルダにアクセス出来るように PATH を通します

まず検索欄からenvと検索して、コントロールパネルを開きます

次にAdvancedのタブを開き、ウィンドウ下部にあるEnvironment Variablesをクリックします

次にPathを選択し、Editをクリックします

Newをクリックし、先ほど作成した flutter フォルダ内の「binフォルダ」のパスを入力します

ファイルのパスを確認する 最後に下記コマンドを実行し、パスが表示されれば設定成功です

$ which flutter

3.Android Studio のセットアップ こちらの公式サイトからAndroid Studioをダウンロードします

利用規約文末の同意にチェックを入れ、ダウンロードを押します

ダウンロードが完了したら、ダウンロードしたファイルをダブルクリックしてインストールを開始します

Android Studio の設定とインストール 次に Flutter を使う為のプラグインAndroid Studio にインストールしましょう

Flutter プラグインをインストール 最後にコマンドラインから Android を実行する為のAndroid SDK Command-line Toolsをインストールします

Android SDK CLI をインストール これで Android Studio のセットアップは完了です

  1. flutter doctor Android Studio と Xcode の設定が完了したら以下コマンドを実行してみましょう

$ flutter doctor

flutter doctorコマンドでは Flutter SDKDartAndroid StudioXcode など Flutter 開発で必要とされるツールの設定状況を確認する事が出来ます

末尾に-vを付ける事で詳細な情報を表示してくれるので、エラーが発生しているような場合はflutter doctor -vで詳細を確認してください

! この時点で各々の PC 環境によって様々なエラーが発生する事があります。いくつか代表的なエラーを記述しますが、ここにないものがあればコメントいただければ、可能な限り追記します。

エラー:Java が実行できない ここまで来ればもう一息です。

  1. Android License の設定 flutter doctorコマンドを叩いた際に Android toolchain に以下の様に!マークでメッセージが表示されていると思います。

最後にこの android license を設定しましょう

メッセージの指示通り、ターミナルから下記コマンドを実行しましょう

$ flutter doctor --android-licenses

すると下記の通り、いくつかのライセンス契約書を確認する様に求められるので y を入力した後 Enter を押して進みます

Review licenses that have not been accepted (y/N)? y

すると5枚ほどライセンスの確認書類が表示されるので全て y を入力して Enter で承認します

通常のターミナルに戻ったら設定完了です

  1. 必要な項目が Green になれば終了!🎉 最後にもう一度flutter doctorを実行し、Flutter、Android toolchain、Android Studioなどの項目に緑色のチェックが入っていれば 完了です。

ChromeVisual Studioについては必要になった際に適宜インストールしてください。


2.dartプログラムの作成とテスト

2-1. Dartのプログラムを試す:

https://dartpad.dev/?

1.1. DartPadを使う:

dartpad.dev

DartPadはWebブラウザで動作するDartのオンラインエディタで、インストールが不要です。 DartPadにアクセスして、プログラムを入力し、実行してみましょう。

1.2. Flutterの環境を利用する: ターミナルやコマンドプロンプトを開き、新しいフォルダを作成して移動します。

mkdir dart_sample
cd dart_sample

その後、以下のようにDartのファイルを作成します。

echo 'void main() { print("Hello, Dart!"); }' > main.dart

そして、以下のコマンドでDartのプログラムを実行します。

dart main.dart

"Hello, Dart!"と表示されれば成功です!

2-2. Android Studioでのテスティング

  • 2.1. Android Studioを起動します。

  • 2.2. "Start a new Flutter project"を選択します。

  • 2.3. "Flutter Application"を選択して"Next"をクリックします。

  • 2.4. プロジェクトの名前や場所を設定します。例: 名前を"my_simple_app"として"Next"をクリックします。

  • 2.5. いくつかのオプションが表示されるので、デフォルトのままで"Finish"をクリックします。

  • 2.6. しばらくすると、新しいプロジェクトが開始されます。中心にはmain.dartというファイルが自動的に開かれるはずです。これがアプリのメインファイルです。