0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Swift学習記#4「関数の定義」

Last updated at Posted at 2020-05-16

#はじめに
今回はswiftにおける関数の定義方法について書いて行きます!

関数は初めて触ると、どの様にデータが流れているのか
よくわかりませんよね!僕も最初はそうでした!

なのでここでは、基礎的な定義とともに
引数戻り値なんかについても覚えて、
データの流れをしっかり掴みましょう!

##関数とは
関数(function)とは、
簡潔に言うと**「特定の処理を行うためのまとまり」**です。

他の言語でも用いられていることが多いので、
他の言語を学習したことのある方はすでにご存知かと思います。

##関数の定義
書式はこんな感じ、、、

test.Playground

func 関数名(引数名1:引数1の型, 引数名2:引数2の型, ...)-> 戻り値の型{

    return //戻り値

}

定義の中にある引数というのは、**「関数に渡す値」**のことで
渡す値は、その後に書くコードの中で指定します。

具体例はこんな感じ、、、

test.Playground

func test(test1:Int, test2:Int)-> Int{

    // 関数で行う処理
    var num = 100
    return num + test1 - test2 //戻り値                                                           
}                           
                                           
                                            
// 関数の呼び出し                  
print(test(test1:10, test2:100)) // 引数

最後の「print(test(test1:10, test2:100))」で
関数testに「test1:10, test2:100」という値を渡し、関数で処理された
データが戻ってきて(これを戻り値という)表出されている。

##可変個引数
一つの引数で複数の値を渡す場合。

具体例はこんな感じ、、、

test.Playground
func test ( num: Int... ){
   //.enumerated()は列挙型
    for (i, num) in num.enumerated() { 
        print(num)
        print( "\(i) - \(num)" )
    }
}

test( num:5, 6, 7 )

// 結果
ー> 5
     0 - 5
     6
     1 - 6
     7
     2 - 7

こうすることで、引数で複数の値を渡すことができる。

##引数の外部名
swiftでは、引数の関数の外での名前を決めることができる

具体例はこんな感じ、、、

test.Playground
// 標準形
func getArea( radius r : Double ) -> Double {
	let pi = 3.14
	return pi * r * r
}

var a = getArea( radius: 3 )
print( a )

// 省略形
func getArea( _ r : Double ) -> Double {
	let pi = 3.14
	return pi * r * r
}

var a = getArea( 3 )
print( a )


( radius r : Double )の様に、
(外の引数名 中の引数名:データの型)の形を作ることができる。

また、関数の外での引数名は、( _ r : Double )の様に
アンダースコアを記入することで省略できる。

##タプルを返す関数
swiftでは、関数は戻り値をタプルで返すこともできる

####*タプルとは、
 複数の変数をまとめ上げたり、
 ひとつの変数に簡単にわかりやすい意味を与えたりするもので、
 ()で括って指定する。例:(name:String, age:Int)

具体例はこんな感じ、、、

test.Playground

func group(ID:Int) -> (name:String, age:Int) { //戻り値がタプル
	switch ID {
	case 1000:
		return ( "Ichiro", 30 )
	default:
		return ( "Unknown", 0 )
	}
}

var p1 = group( ID: 1000 )
print( "\(p1.name) - \(p1.age)" )

var p2 = group( ID: 5 )
print( "\(p2.name) - \(p2.age)" )

// 結果
ー> Ichiro - 30
   Unknown - 0

##inoutによる参照渡し
swiftでは、関数を定義する際に( msg : inout String )の様に
データ型の前にinoutをつけ、引数を設定する際に( msg: &s )の様に
引数の値の前に&をつけると参照渡すを行うことができる。

####*参照渡しとは
 通常の引数は、関数外の変数の値をコピーして渡す値渡しを行うため、
 関数外の変数の値に変化はない
 しかし参照渡しの場合は、関数ないで変数の値を変更すると、
 その変更を関数外にある元の変数と共有することになる

具体例はこんな感じ、、、

test.Playground
func myfunc ( msg : inout String ) {
    msg = "Hello World!"
}

var s = "Hello!"
print( "s = \(s)" )

myfunc( msg: &s )

print( "s = \(s)" )
print(s)

// 結果
ー> s = Hello!
   s = Hello World!
   Hello World! // 変数が関数での変更を共有している

#これまで
今回は関数の定義について書いて行きました。

swift初級で使用するのは、この位ではないかと思います。
学習が進めばさらにいろんな表記や手法が出てくると思うので、
その都度追加していこうと思います!

ここまでで、swift学習記も#4になり、
基礎知識もあらかたついた様な気もするので、
これからはアプリを開発しながらの学習をやって行きます!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?