1
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 5 years have passed since last update.

Swift の inout パラメーターと Functional プログラミング

Last updated at Posted at 2016-07-03

The Swift Programming Language (Swift 3) を読んだ時に感じた事

  1. Swift の inout パラメーター は C++ の参照渡しのように、メソッドの引数に指定した変数の値を、メソッドの内部から変更することができるらしい
  2. Functional プログラミングにはそぐわない機能に感じたが、
    1. 呼び出し前と呼び出し後にそれぞれ値がコピーされる動きだそうで、

    2. 例えばメソッドがクロージャーを返す場合、そのクロージャー内部で値を変更しても反映されないとのこと

      1. そのクロージャーはメソッド呼び出し後に実行されるため
    3. よく考えてみると

       func foo(x: inout Int) -> Int {
       	x += 1
       	return x + 10
       }
       var y = 1
       let z = foo(x: &z)
      

      は、以下と等価になると考えれば Functional のセマンティクスから外れてないことに気づいた

       func foo(x: Int) -> (Int, Int) { // 複数値を return
       	var x2 = x
       	x2 += 1
       	return (x + 10, x2)
       }
       let y = 1
       let (z, y2) = foo(x: z)
      
      1. yy2 になってしまっているけれど、コンパイル時の最適化に使われる SSA だと思えば OK
  3. ただ The Swift Programming Language (Swift 3) 内を「functional」でテキスト検索してみても見つからなかった
    1. Wikipedia だと Paradigm に functional が含まれてるけれど、あまり売りにしている訳ではないのかも?
1
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
1
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?