1 | 2 | 3 | 4 | 5 |最初 次ページ >>
2017年06月24日(土) 15時07分44秒

iPhoneアプリ開発、号外 ループの話

テーマ:Xcode

 前々回IBMのSwift環境、そのサンプルとして示した累乗計算例の説明

 

↓ループを使った累乗計算例

 

http://swift.sandbox.bluemix.net/#/repl/594793c6ea3ae2065baec60d

 

 まず、前回説明したSwiftのプログラムルール

 

 ルールその1、上から順に実行する。

 ルールその2、// から改行まではメモ書きなのでプログラムとみなさない。

 

てのがあるので、最初の

  // baseに対するexponent乗をループで行う

はメモ書きであってプログラムじゃない。

 加えてルールその3、関数定義部は飛ばす。

 

 

 なので、メモ書きの後の

func power(base:Double, exponent:Int) -> Double {
	//	exponentが0や負の数の対処は省略
	var result = 1.0
	for _ in 1...exponent {
		result *= base
	}
	return result
}

てのもプログラムではあるけど、関数定義部なんで、すぐには実行されません。

 関数定義てのは何かというと

 

 

ラノベ本の原型から抜粋(129ページ〜部分に相当)


「関数も定義したんですか?」

「うん、見よう見まねで」

関数定義

 関数は自分で定義することもできる。

 数学だとこうなる。

 

    数学での書き方

 Swiftだとこうなる。

 

    Swiftでの書き方

 

 数学と違い、Swiftでは、関数の定義であることを示すキーワードや、仮引数や戻す値がどういう型なのかを指定する必要が出てくるのだ。

§

 型とは記憶容器の種類を意味する。

 数値を扱う変数なら、整数を扱える記憶容器にするか、実数を扱える記憶容器にするかでInt型とDouble型に別れる。整数を扱うInt型では小数点以下が扱えない。

 一見、Double型の方が万能そうだが、コンピュータの精度の点で限界があり、例えば、今回のような0.1は0.1000000000000000055…と記憶され、加算していくと正確には2.0にならない。

 その点、Int型の場合、1は1として記憶してくれる。ある程度の誤差は許容しつつ使うのがDouble型だ。

 実は、これまでのプログラムで使っていた変数にも型は設定されていた。

 変数や定数宣言で初期値に小数点をつけた数値を設定するとDouble型、付いていなければInt型となるルールだ。

 だから左京さんは変数tの宣言時に0ではなく0.0と書いた。

    var t = 0.0		← Double型の変数になる
    var t = 0		← Int型の変数になる

§ 

 関数を定義する時は、まず仮引数ごとに、この型を明示する必要がある。  それに加えて、もし値を戻すタイプの関数なら ( ) の後ろに、自分が戻す値の型を明示する必要もある。

 

 

 そして関数の処理内で、retrunキーワードを使って、戻したい値を指定して関数から戻るようにする。

 
 

 関数を呼び出す側は、こうした関数の定義にそった形で、関数呼び出し文を書き、戻される値を定数や変数に設定して利用する。

 

 

 関数の定義や呼び出し方には、こういったルールがある。


 
てなわけで、関数定義部は一旦無視して、その下の
//	1-5の数でテスト
for exponent in 1...5 {
	print("2 の", exponent, "乗 =", power(base:2, exponent:exponent))
}
に注目してください。
 最初の1行はメモ書き、「1-5の数でテスト」て書いてるように、累乗計算をテストしてます。2の1乗、2の2乗、2の3乗、2の4乗、2の5乗てのをループ文でテストしてる。
 ループ文がどういうものかというと
 

ラノベ本の原型から抜粋(109ページ〜部分に相当)


 ループ文は同じ処理を繰り返すための文法だ。

 

    立たされて

    ららら ……… *1 

    一人静かな廊下だね

    (*1を4回繰り返す)

 

 よく歌詞カードなんかで見る表現。同じようなことがSwiftでも書けるようになっている。

 

for文

 

 for文はいくつかあるループ文の1つで、カウント用変数の値を1つずつ増やしながら、指定された処理を繰り返すというもの。

 

 この書き方だと、変数iが用意され、その値が1から10,000まで1つずつ変化し、その間 { } 内の処理が繰り返されることになる。

 

 ここでは、{ } 内の処理として

と書いているので、このfor文は、変数iの値を1、2、3、…と変化させつつ、10,000回、totalの値にiの値を加える処理を繰り返すプログラムを書いたことになる。

 

 最初にtotalの値を0にしておけば、ループを抜けた時には、totalの値は1から10,000までの総和になっているわけだ。

 ループ文を使う方が、最初の足し算をひたすら並べたやり方よりずっと簡単で、書き間違う可能性もずっと少ない。おまけにループ範囲を書き換えるだけで、1から10の総和でも、100から10,000の総和でも計算できる。

for i in 1...10 {		← 1から10の総和
for i in 100...10000 {	← 100から10,000の総和

 

なので、今回の

 

 

なら、exponentを1〜5に変化させながら、上で無視した関数定義部で定義されているpowerという関数を呼び出し、その結果をprint関数で表示させてるってことになります。

 power関数は、引数のbase:2でを2に指定、exponent:exponentで、そのをexponent(が記憶してる値)乗するって指定になる。そしてその計算結果が関数の戻り値として返されます。
 で、その戻り値をprint関数の引数に渡して画面に表示してる。

 

 

 ちなみにprint関数はかなり凝った関数定義によって、こんな感じで「,」で区切って複数の引数を渡すことができるようになってます。

 power関数が何やってるかは、以下を参考に自分で考えよう!

 でわでわ。

 

AD
いいね!した人  |  コメント(0)  |  リブログ(0)
最近の画像つき記事
 もっと見る >>
2017年06月20日(火) 18時34分59秒

iPhoneアプリ開発、号外 ど〜こ〜で〜もプログラミングぅ

テーマ:Xcode

 テッテレー♪

 前回紹介したIBMのSwift環境は、数多あるSwift入門サイト(Swift 入門 で検索しよう)のサンプルコードを試すことができます。

  しかも、iPhoneのSafariでも使えるので、電車やバスの中、休息中の公園、図書館、あらゆるところでSwiftプログラミングの学習ができるわけですよ。

 ノマド学習!

 

「え、違いますよ~、やだなあ。私もスタバでドヤ顔してみたーい(はあとまーく)」

「ネトゲ廃人がスタバとかマジ笑う」 

 

 ↓例えば、こんな感じ

 

 

 

 こいつはラノベ本に書かれているプログラム、1〜10の総和の縮小版、1〜2の総和ってことになります。何やってるかは、以下を読むべし。

 読んだ後は1〜10の総和を自分で書き込んで試すべし!

 ちなみにIBMのSwift環境は、iPhoneからだと日本語入力できません。なので、文中に出てくるメモを日本語で書くことはできない。そこんとこは諦めるように。

 

ラノベ本の原型から抜粋(102ページ〜部分に相当)


 

 書きながら間違いを確認でき、対話形式で学習ができるわけだ。 例えば、1から10までの数の総和を計算させるプログラムなら、こんな風に書く。  

 最初の1行は無くてもいい。 この1行は、このプログラムを説明しているメモで、コンピュータの振る 舞いには影響しない。 

 役者さんが、台本にメモを書き込むのに似ている。 Swiftには、こんな風にコンピュータの振る舞いとは関係ない文章をプロ グラムコード内に残せる仕組みが用意されている。 振る舞いに影響は及ぼさないが、メモが効果的なのは間違いない。誰が見 たって「これって1から10までの総和のプログラムなんだ」ってなる。

 

§

 実際のプログラムは次の一文から始まる。

 

変数宣言

 

 変数宣言とは記憶容器を用意する一文。

 1から10までの数の総和を計算させるには、整数を記憶し、1を足すと1増 え、2を足すと2増える記憶容器が必要だ。 このような記憶容器は、変数と呼ばれ、varというキーワードで用意される。 変数は必要なだけ用意できるので、プログラマが変数ごとに呼び名をつけ る。ここでは総和を記憶するのでtotalと名付けた。 

 

 

 以後、totalという変数が利用できるようになる。 この時点でのtotalに記憶されている値は1。 この一文を変数宣言という。

§

その次の行が、変数totalの記憶値に2を加算する動作の記述。この記述は演算式とも言う。

 

演算式 

 

 

 演算式を記述どおり実行すると、変数totalの記憶値は3となる。そんな 演算式が10行並んでいる。 

 

 

 変数totalを用意し1を記憶させ、その記憶値に、2、3、4、...と値を加算 しているわけだ。 

 

 最後の行では、10まで足し終わった変数totalの記憶値を結果画面に表示 させている。 

 printは受け取った値を結果画面に表示する関数。 

関数

 Swiftの関数も、数学で使う関数も、なんらかの機能を提供するという点 では同じだ。
 数学で使われる関数は、こんな感じ。 

 

 これで数式中に、f(1)と書けば2を意味するし、f(2)と書けば5を意味する ことになる。関数fはx2+1を計算するという機能を提供しているわけだ。

 Swiftでも、関数名の後ろの ( ) の中に、渡したい引数を書くことで、 その関数の機能を利用できる。 

 

 受け取った値を元に、特定の計算式で新しい値を計算するのが数学の関数 なら、受け取った値を元に何かアクションを起こすのがSwiftの関数。

 print関数が提供する機能は、受け取った引数の値を結果画面に表示する ことなので、これで変数totalの記憶値を結果画面に表示することになる。

 こんな風に関数の機能を使うことを、関数を呼び出すと表現する。 print関数を呼び出し、変数totalの記憶値を画面に表示させたわけだ。 

 

 以上で1から10までの数の総和を計算させ、結果を画面に表示させるプロ グラムを書いたことになる。

 ただし、あまりスマートなプログラムとは言えない。

 想像してみて欲しい。このやり方で10,000までの総和を計算させるプログ ラムを書いてる自分の姿を!

§

 そんな写経のような作業を回避するために、たいていのプログラム言語に はループ文が用意されている。 

 


 

 というわけで、ループ文は次回!

 

 
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
2017年06月19日(月) 18時39分10秒

iPhoneアプリ開発、号外 IBMのSwiftサイト

テーマ:Xcode

 ちなみに

 

エリカさん! iPhoneアプリを作らないと「廃部ね」って言われたのですが、どうしたらいいですか?

 

で書いたIBMのどこでもSwiftのサイトはここです。

 ↓

 

https://swift.sandbox.bluemix.net

 

 この部分はフィクションじゃないんですね〜。

 iPhoneでも実行できるお。

 

 例えば、累乗計算をループでやったり

 

 

 ↓ループを使った累乗計算例

 

http://swift.sandbox.bluemix.net/#/repl/594793c6ea3ae2065baec60d

 

 

 階乗計算やったり

 

 1! 2! 3! 4! 5! ・・・

 

 ↓ループを使った階乗計算例

 

http://swift.sandbox.bluemix.net/#/repl/59479547ea3ae2065baec60f

 

 マクローリン展開を使ったsin値の計算だってできます。

 

 ↓マクローリン展開を使ったsin値の計算例(上で作った累乗、階乗関数を利用)

 

 

http://swift.sandbox.bluemix.net/#/repl/59479a3eea3ae2065baec614

 

 

 ↓こっちは、上で作った累乗、階乗関数を利用しないバージョン

 

http://swift.sandbox.bluemix.net/#/repl/59479a20ea3ae2065baec613

 

 比較用に、標準で用意されているsin関数の値も表示させたりしてる。

 サンプルプログラムの説明は、待て次回!

AD
いいね!した人  |  コメント(0)  |  リブログ(0)
1 | 2 | 3 | 4 | 5 |最初 次ページ >>

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。