-
Notifications
You must be signed in to change notification settings - Fork 0
CS_basic_grammar2
Swiftの基本文法です。自分のパソコンで実際にコードを書きながら覚えていきましょう。
参考コードはこちら
復習 基本文法1の変数の型の部分でbool型を学びました。trueとfalseの2つの値を持つ型です。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Sample : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
bool isMac = true;
Debug.Log(isMac);//trueが出力
}
// Update is called once per frame
void Update()
{
}
}
(Debug.Log()でboolを出力する場合はtrue,falseでなく、True,Falseと出力される場合がありますが、意味は同じと考えて頂いて問題ありません)
ここでは比較演算子と論理演算子について学んでいきます
2つの値を比較するための演算子です。まずは「==」についてです。これは左右の値を比較して、等しい場合はtrue、等しくない場合はfalseを返す演算子です。数学の「=」の意味に近いかもしれません。
int x = 10;
int y = 5;
int z = 5;
Debug.Log(x == y);//falseが出力
Debug.Log(z == y);//trueが出力
次に「!=」は「==」の否定の意味となり、逆の値が出力されます。
int x = 10;
int y = 5;
int z = 5;
Debug.Log(x != y);//trueが出力
Debug.Log(z != y);//falseが出力
続いて大小比較です。以下の例を見てみましょう。
int x = 10;
int y = 5;
Debug.Log(x < y);//falseが出力
Debug.Log(x <= y);//falseが出力
Debug.Log(x > y);//trueが出力
Debug.Log(x >= y);//trueが出力
//ちなみに式を比較することも可能
Debug.Log(x/2 < y);//falseが出力
Debug.Log(x/2 <= y);//trueが出力
数学の<,>と同じような意味なので直観的に理解しやすいと思います。注意点は、数学の≦や≧をプログラミングではぞれぞれ<=、>=と記述する点です。
練習問題2-1. 12*30と365を「==」で比較して、結果を出力しましょう。
数学の「かつ」、「または」、「否定」の意味です。以下の表がのように対応しています。
演算子 | 意味 |
---|---|
& | かつ |
| | または |
! | 否定 |
AND演算子の&は左右の両方がtrueの場合にtrueを出力します。それ以外はfalseです。
int x = 10;
Debug.Log(x > 0 & x < 30);//trueが出力
OR演算子の|は左右のどちらか少なくとも一つがtrueの場合にtrueを出力します。それ以外はfalseです。
int x = 10;
Debug.Log(x > 0 | x == -10);//trueが出力
NOT演算子は後に続く値を否定します。
Debug.Log(!false);//trueが出力
練習問題2-2. 「10 < 5」かつ「4 >= 2」の結果を出力しましょう
if文を用いると、場合分け処理を行うことができる。「もし~ならば、××」の意味。
if文は以下のような形で書き、もし条件式がtrueでならば、{}内の処理が行われる。
if (条件式){
処理
}
以下が具体例
int value = 5;
if (value > 0){
Debug.Log("valueは正の数");
}
出力結果
valueは正の数
また、else(「そのほかの」という意味)を用いることで、「もし~ならば、××、そうでなければ〇〇」という意味になる。以下のように書く。
if (条件式){
処理1
}else{
処理2
}
具体例は以下
int value = -5;
if (value > 0){
Debug.Log("valueは正の数");
}else{
Debug.Log("valueは正の数ではありません");
}
出力結果
valueは正の数ではありません
またelse ifによってさらに条件分岐をすることができます。「もし~ならば、××、もし~~~ならば△△、そうでなければ〇〇」という意味になる。以下のように書く。
if (条件式1){
処理1
}else if(条件式2){
処理2
}else{
処理3
}
具体例は以下
int value = -5;
if (value > 0){
Debug.Log("valueは正の数");
}else if(value == 0){
Debug.Log("valueは0");
}else{
Debug.Log("valueは負の数");
}
出力結果
valueは負の数
なお、複数の条件に合致しても、実行されるのは最初に合致した条件式の処理のみです。また、else ifはいくつでも書くことができます。必要がなければelseは書く必要はありません。
練習問題 2-3. 成績判定システムをつくろう!int型でscoreを定義し、0から100までの任意の整数で初期化する。そして、scoreが90以上なら「あなたの成績はA」、70以上なら「あなたの成績はB」、それ以外ならば「あなたの成績はC」と出力させよう。またscoreの初期化の値をいろいろと変えてみて、正常に動いているか確認しよう。
条件分岐の式としてswitch文があります。特に、条件が多い時はif文よりも場合分けをさらに簡潔に書くことが可能です。
以下のように書きます。
switch(条件の値){
case 値1:
処理1
break;
case 値2:
処理2
break;
case 値3:
処理3
break;
default:
処理4
break;
}
条件の値とcaseの後ろにある値が一致した時、その部分にある処理が実行されます。それぞれの処理の最後にbreakを書くことを忘れないようにしましょう。breakを書かないと、そのまま次のcaseの値の比較を続けます(最後までいかないとswitch文を抜け出せなくなる)。また、defaultはどのcaseにも一致しなかった場合に実行されます。必要がなければdefaultは書かなくても問題ありません。
if文との対比で具体例をみてみましょう
int rank = 2;
if(rank == 1){
Debug.Log("金メダル");
}else if(rank == 2){
Debug.Log("銀メダル");
}else if(rank == 3){
Debug.Log("銅メダル");
}else{
Debug.Log("参加賞");
}
出力結果
銀メダル
int rank = 2;
switch(rank){
case 1:
Debug.Log("金メダル");
break;
case 2:
Debug.Log("銀メダル");
break;
case 3:
Debug.Log("銅メダル");
break;
default:
Debug.Log("参加賞");
break;
}
練習問題 2-4. おみくじシステムをつくろう!int型でnumberを定義し、任意の整数で初期化する。switch文を用いて、numberを5で割ったあまりが0の時は「大吉」、1の時は「中吉」、2の時は「吉」、3の時は「凶」、それ以外の時は「大凶」と出力させよう。
for文を使うと繰り返し処理を簡単に行うことができる。例えば以下のようなコードを考えてみよう。
Start(){
Debug.Log("羊が1匹");
Debug.Log("羊が2匹");
Debug.Log("羊が3匹");
Debug.Log("羊が4匹");
}
出力結果
羊が1匹
羊が2匹
羊が3匹
羊が4匹
これを100匹まで行うとしたら、100回コピペすることになる。そうではなく、繰り返しの処理を使うことで簡単に書くことができる。
Start(){
for(int i = 1;i <= 4;i++){
Debug.Log("羊が" + i + "匹");
}
}
出力結果
羊が1匹
羊が2匹
羊が3匹
羊が4匹
for文は以下のように書く。
for(変数の初期化;条件;変数の更新){
処理
}
まず最初に変数の初期化を行い、その後条件判定をする。この値がtrueであれば、処理を実行し、最後に変数を更新する。そして、もう一度条件判定し、falseであればこのfor文は終了する。trueであれば処理が行われ、変数の更新、条件判定。。。。。と続いていく。
練習問題2-5. for文を利用して以下の図のような出力をするプログラムを組もう
while文を用いても繰り返し処理を行うことができる。while文は以下のように書く。
while(条件){
処理
}
条件がtrueである限り、処理を繰り返す。
for文と比較してみよう!
Start(){
for(int i = 1;i <= 4;i++){
Debug.Log("羊が" + i + "匹");
}
}
出力結果
羊が1匹
羊が2匹
羊が3匹
羊が4匹
Start(){
int i = 1;
while(i <= 4){
Debug.Log("羊が" + i + "匹");
i++;
}
}
出力結果
羊が1匹
羊が2匹
羊が3匹
羊が4匹
for文やwhile文では条件がずっとtrueであれば無限にループしてしまう。コンピュータへの負荷が大きくなってしまうので、無限ループしないようなコードを書きましょう。以下無限ループの例
Start(){
int i = 1;
while(i <= 4){
Debug.Log("羊が" + i + "匹");
//i++;//iの値がプラスされない
}
}
出力結果
羊が1匹
羊が1匹
羊が1匹
羊が1匹
・
・
・
羊が1匹
・
・
練習問題2-5. while文を利用して以下の図のような出力をするプログラムを組もう
関数を定義すると、同じ処理を何回も記述せずに済む。
関数は、func 関数名(引数名: 引数の型)-> 戻り値の型{ 処理 }
のように定義する。
引数や戻り値がない場合、適宜省略する。
func hello(){
print("hello")
}
hello() //helloと出力
func add(x: Int, y: Int) -> Int{
return x + y
}
print(add(x: 3, y: 5)) //8と出力
//_で引数を省略できる。
func add2(_ x: Int, _ y: Int) -> Int{
return x + y
}
print(add2(3,5)) //8と出力
//分かり易いように引数名の別名を置くこともできる。
func showTestScore(mathematicsTestScore score: Int) -> String{
return "数学の点数は\(score)点"
}
showTestScore(mathematicsTestScore: 80)