2014年08月13日
Posted by 屋台ブルー at
2014年08月13日00:00 Comment(0)
Swiftで遊ぼう! - 36 なんだかんだと全体像がおぼろげに... [ジェネリック]
2014年10月16日
Swiftの言語体系を理解したところで次のステップ(iPhoneアプリ作成)に取りかかれそうだ。過去の記述を見直していて大きな間違いを発見! 今までツッコミがなくて良かったです。まだまだこのブログの読者は少ないからでしょう。これから私のブログを読んでSwiftを勉強する人が現れるかもしれないので修正しておきますね。まだまだ間違いはあると思うので指摘して下さい。
-----
Swiftに関する記事を読んでいると、このプログラミング言語はモダンと形容されている。モダンとはなんぞや? という疑問が生じるが、過去のプログラミング言語を知らない私に必要ない形容だろう。構造型プログラミング、オブジェクト指向プログラミング、命令型プログラミング、関数型プログラミングなど様々なプログラミングスタイルが世の中に氾濫しているが、私にはどうでもいいことかもしれない。というのもプログラミング言語の学習は外国語の習得と同様と考えているからだ。英語をある程度使えるレベルに学習をしたが、英語学(言語)にさほど興味はない。英語は情報を得るための道具であり、道具使いを目指している。となるとプログラミングも同様であり、自分が実現したいアプリケーションを作るためのツールを習得したいと考えていて、Macオタな私がSwiftを選択するのも自然な成り行きで、Swiftの言語体系がなんであれ、それを無条件に勉強しなきゃならないのは避けようがない。これから様々なSwiftコードがプログラマーによって書かれるだろう。それを読める読解力と応用力を養っていくために。Swiftのプログラミング手法に慣れる必要があるよね。
Generics:ジェネリック
Swiftツアーの最後で説明されている。Genericsなんですが、これを日本語でどう訳したらいんでしょうね。だらだら表記の統一性もなく説明をしてきたが、ここらで表記を統一しないと後で振り返って読みにくい。これから「ジェネリック」という言葉を使うことにしよう。でも日本語訳なので、他にコンセンサスの得られた表記が使われるようになったら変更していきます。
そうそうジェネリック、なんとなくやっと概念がわかりました。
できるだけシンプルで分かり易いプログラムコードを書くことがプログラマーの基本能力になる。虫(バグ)というミスをコードに入れない。これは、単純なスペルミスや文法的な間違いのことではない(単純ミスは、最新の開発環境を使っていると自動的に指摘してくれる。Swiftの開発環境Xcode6でも同様)。コードの論理的なミスのことで開発環境は指摘してくれない。こういった間違いはコードが長くなればなるほど気づきにくくなり、デバック(虫の駆除)作業に多大な時間がかかるという。←こういう経験はないので、受け売りです(^^;) この論理的なミスを減らすために、プログラム言語自体が進化してきたのだろう。私が30年以上前にBASIC言語でプログラムを書いていた頃があったが、プログラムコードの流れは上から下の行に流れていくものだった。そこに「goto」文をいれ任意の行に飛ばしていると、自分で書いたプログラムコードでも読めなくなってしまうことがあった。プログラムを書かなくなったので、その後の言語の進化は知らないが、Swiftに「goto」文は無い。昔は無かった概念で溢れ、シンプルで分かりやすいブログラムコードを書くための道具に進化したのだろう。ジェネリックもそうした進化の過程で生まれた機能だ。同じ機能を何度も使うために関数に名前をつけて必要な時に呼び出すが、一般的な関数の場合、特定の「型」で指定されたパラメーターが使用れている。引数として同じ「型」を関数に渡してやらないといけないが、ジェネリックというのは、その「型」も一緒に関数に渡してやることができるということ。Swiftツアーのジェネリック例文で説明しよう。
func repeat<T>(item: T, times: Int) -> [T] {
var result = [T]()
for i in 0..<times {
result.append(item)
}
return result
}
ここのコードが間違えてました(^^;)
repeat("Ban", 5)
repeat(5, 5)
repeat([0.3, 5.2, 4.7], 3)
repeat([5: "sample"], 2)
// ["Ban", "Ban", "Ban", "Ban", "Ban"]
// [5, 5, 5, 5, 5]
// [[0.3, 5.2, 4.7], [0.3, 5.2, 4.7], [0.3, 5.2, 4.7]]
// [[5: "sample"], [5: "sample"]]
少し、例文を変えているが、ジェネリックで指定する型名は自分で好きに名前がつけられる。長い名前をつけてもいいんでしょうけど、コードを書くという観点から考えるとシングルワードというのが慣習的に望まれるでしょうね。
Swiftの言語体系を理解したところで次のステップ(iPhoneアプリ作成)に取りかかれそうだ。過去の記述を見直していて大きな間違いを発見! 今までツッコミがなくて良かったです。まだまだこのブログの読者は少ないからでしょう。これから私のブログを読んでSwiftを勉強する人が現れるかもしれないので修正しておきますね。まだまだ間違いはあると思うので指摘して下さい。
-----
Swiftに関する記事を読んでいると、このプログラミング言語はモダンと形容されている。モダンとはなんぞや? という疑問が生じるが、過去のプログラミング言語を知らない私に必要ない形容だろう。構造型プログラミング、オブジェクト指向プログラミング、命令型プログラミング、関数型プログラミングなど様々なプログラミングスタイルが世の中に氾濫しているが、私にはどうでもいいことかもしれない。というのもプログラミング言語の学習は外国語の習得と同様と考えているからだ。英語をある程度使えるレベルに学習をしたが、英語学(言語)にさほど興味はない。英語は情報を得るための道具であり、道具使いを目指している。となるとプログラミングも同様であり、自分が実現したいアプリケーションを作るためのツールを習得したいと考えていて、Macオタな私がSwiftを選択するのも自然な成り行きで、Swiftの言語体系がなんであれ、それを無条件に勉強しなきゃならないのは避けようがない。これから様々なSwiftコードがプログラマーによって書かれるだろう。それを読める読解力と応用力を養っていくために。Swiftのプログラミング手法に慣れる必要があるよね。
Generics:ジェネリック
Swiftツアーの最後で説明されている。Genericsなんですが、これを日本語でどう訳したらいんでしょうね。だらだら表記の統一性もなく説明をしてきたが、ここらで表記を統一しないと後で振り返って読みにくい。これから「ジェネリック」という言葉を使うことにしよう。でも日本語訳なので、他にコンセンサスの得られた表記が使われるようになったら変更していきます。
そうそうジェネリック、なんとなくやっと概念がわかりました。
できるだけシンプルで分かり易いプログラムコードを書くことがプログラマーの基本能力になる。虫(バグ)というミスをコードに入れない。これは、単純なスペルミスや文法的な間違いのことではない(単純ミスは、最新の開発環境を使っていると自動的に指摘してくれる。Swiftの開発環境Xcode6でも同様)。コードの論理的なミスのことで開発環境は指摘してくれない。こういった間違いはコードが長くなればなるほど気づきにくくなり、デバック(虫の駆除)作業に多大な時間がかかるという。←こういう経験はないので、受け売りです(^^;) この論理的なミスを減らすために、プログラム言語自体が進化してきたのだろう。私が30年以上前にBASIC言語でプログラムを書いていた頃があったが、プログラムコードの流れは上から下の行に流れていくものだった。そこに「goto」文をいれ任意の行に飛ばしていると、自分で書いたプログラムコードでも読めなくなってしまうことがあった。プログラムを書かなくなったので、その後の言語の進化は知らないが、Swiftに「goto」文は無い。昔は無かった概念で溢れ、シンプルで分かりやすいブログラムコードを書くための道具に進化したのだろう。ジェネリックもそうした進化の過程で生まれた機能だ。同じ機能を何度も使うために関数に名前をつけて必要な時に呼び出すが、一般的な関数の場合、特定の「型」で指定されたパラメーターが使用れている。引数として同じ「型」を関数に渡してやらないといけないが、ジェネリックというのは、その「型」も一緒に関数に渡してやることができるということ。Swiftツアーのジェネリック例文で説明しよう。
func repeat<T>(item: T, times: Int) -> [T] {
var result = [T]()
for i in 0..<times {
result.append(item)
}
return result
}
ここのコードが間違えてました(^^;)
repeat("Ban", 5)
repeat(5, 5)
repeat([0.3, 5.2, 4.7], 3)
repeat([5: "sample"], 2)
// ["Ban", "Ban", "Ban", "Ban", "Ban"]
// [5, 5, 5, 5, 5]
// [[0.3, 5.2, 4.7], [0.3, 5.2, 4.7], [0.3, 5.2, 4.7]]
// [[5: "sample"], [5: "sample"]]
少し、例文を変えているが、ジェネリックで指定する型名は自分で好きに名前がつけられる。長い名前をつけてもいいんでしょうけど、コードを書くという観点から考えるとシングルワードというのが慣習的に望まれるでしょうね。