質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

1473閲覧

Swift Incrementで困っています。

cheeeeeeese

総合スコア179

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2015/11/02 20:23

編集2015/11/02 20:38

皆様、質問がございます。よろしくお願い申し上げます。

質問

下記のa++、++aが何の処理を行っているのかが理解できません。

If the operator appears before the variable, it increments the variable before returning its value. もしオペレータが変数の前に表示される場合は、オペレーターが値を戻す前に、その変数をインクリメント(加算)します。 If the operator appears after the variable, it increments the variable after returning its value. もしオペレータが変数の後に表示される場合は、オペレーターが値を戻した後、その変数をインクリメント(加算)します。

と説明がありましたが、理解には至りませんでした。

Which choice is the output value of the following code: var a = 0 let b = ++a let c = a++ print("\(a) \(b) \(c)") //211

よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

質問文のコードは次のコードと同等です。

swift

1var a = 0 2// let b = ++a 3a = a + 1 4let b = a 5 6// let c = a++ 7let c = a 8a = a + 1 9print("\(a) \(b) \(c)") //211

イメージ説明
イメージ説明

++a は a を 1 つ増やしてから、その結果を式の値として返します。
a++ は 式の値としては、 a を返しますが、その後に a を 1 つ増やします。
(これらの記法と動作は c や java でも同様です)
a++, ++a は 普通なら2つの文で書くところを短く書く省略記法です。
for 文では

for var i = 0; i < 5; i++ { ... }

のように ++ をよくつかいます。
この場合は ++i でも l++ でも、動作に差が発生しません。
ここでは i が 1 増えることだけが大事で、 i++ や ++i を何かの変数に代入していないからです。

投稿2015/11/02 22:48

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cheeeeeeese

2015/11/03 07:56

いつもご回答ありがとうございます。 お二方の説明により、簡単に理解が進みました!
guest

0

ベストアンサー

前置インクリメントと後置インクリメントの違いですね。

インクリメントとは、変数の値を1増やす処理のことです。
前置と後置の本質的な意味は、質問に書かれている説明通りなのでしょうが、難しいことを抜きにして考えると、処理(計算)順序が変わります。
前置(++が変数の前にあるとき)の場合は他の演算より先に、後置(++が変数の後にあるとき)の場合は他の演算より後に、変数の値を1増加させます。

Swift

1var a = 0 2let b = ++a 3let c = a++ 4print("\(a) \(b) \(c)")

質問文のこのコードを、インクリメントを使わずに書くとすると、

Swift

1var a = 0 2 3// let b = ++a 4a = a + 1 // a = 1 5let b = a // b = 1 6 7// let c = a++ 8let c = a // c = 1 9a = a + 1 // a = 2 10 11print("\(a) \(b) \(c)") // 2 1 1

このようになります。

Swift

1var a = 5 2let b = ++a + 5 3let c = a++ + 5 4print("\(a) \(b) \(c)")

このようなコードを、インクリメントを使わずに書くとすると、

Swift

1var a = 5 2 3// let b = ++a + 5 4a = a + 1 // a = 6 5let b = a + 5 // b = 11 6 7// let c = a++ + 5 8let c = a + 5 // c = 11 9a = a + 1 // a = 7 10 11print("\(a) \(b) \(c)") // 7 11 11

このようになります。

投稿2015/11/02 22:47

shiolier

総合スコア1156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cheeeeeeese

2015/11/03 07:56

ご回答ありがとうございます。 お二方の説明により、簡単に理解が進みました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問