>> [音楽再生]
>> DAN AMRMENDARIZ：誰もが、 CS50セミナーへの歓迎、
スウィフトとのiOSアプリ開発。
私はダン・アルメンダリスだ、と私は教師です ここでハーバード大学のコンピュータサイエンスの。
>> そして、次の時間があることを行っています できるだけ多くのものの駆け足
我々が合うことができるように、このトピックに関する。
私は、すべてのソースコードを掲載します あなたは今日、オンラインで参照すること。
我々は、できない可能性があります 実際にすべてのものの上に行きます
私はだとだと この時間であなたを示します。
しかし、少なくとも、うまくいけばを通じて ソースコードのコメント、
あなたは何を把握しようとすることができるでしょう 正確にそれらのもののために何が起こっています
我々は非常に得ることはありません。
>> の全体構造 次のように今日の話になります。
我々はいくつかの基本的なをしてから始めましょう スウィフト言語とシンタックス、
より高度の一部に入ります スウィフト言語の構文。
言語ので、 本当に近代的であり、それ
高レベルのたくさん持っています 機能、私たちが持っていないもの
CS50を通じて、Cで見られますか、 さらにいくつかの他の言語
我々は始めたこと ようなPHP CS50に使用して、
私はしようとする必要がありますするつもりです また、いくつかのトピックを紹介しています
より高いレベルの言語に関連しています あなたはCS50で詳しく表示されない可能性があること、
しかし、あなたは後で表示されます コンピュータサイエンスのクラス。
だから、になるだろう 密集した時間。
そして、私を聞かせすること自由に感じなさい ご質問があれば知っています。
だから、もし興味があるなら 開発をしている中で
スウィフトと、あるいは本当に 任意のiOSアプリの開発、
要件がいくつかあります。
まず第一に、あなたが使用してする必要が マックは、実施例で実行されています
我々が今日使用してしようとしていることを、 OSの比較的新しいバージョン
この場合、Xは、私がX 10.5を実行していますよ。
必要に応じて、10.11を実行することができます。
しかし、あなたがしようとしているすべてのものに Xcodeの7を含む、後で参照され、
これは最新のバージョンを持っています スイフト2.0であるスウィフト、の。
これは実際にはかなりあります 重要な違い。
構文の多くが持っています かなり大幅に変更
スイフト1.0からいくつかのケースでは、 昨年リリースされました、
スイフト2.0に、どの ちょうどこの秋に出てきました。
だから我々はスイフト2.0を表示するつもりです。
そのたくさんの あなたは、オンラインでの検索
あなたは、追加取得しようとしているとき 物事の様々な方法については、
あなたが明示的にしたいこと スイフト2を検索
むしろちょうど昔ながらスウィフトより作ります あなたは構文が正しい得ることを確認してください。
>> 実際には、これは一般的に真です。
開発の迅速な量があります スウィフトの言語で起こっ
Appleはそれをリリースして以来、私は思います それは少し年以上されているもの、
今。
そして、物事が変更されました 劇的当時インチ
それでイライラすることはありません あなたの周りを探しているとき、もし
スウィフトまたはどのように達成するために、上のトピックのための いくつかの例のコードを使用して何か
またはそれにはない何か 実際スウィフト2.0で動作します。
あなたが探していることを確認してください 特にそのバージョンの
異なるの影響を最小限にしようとします バージョンと、物事のこれらの種類。
>> 私はいくつかのことを指摘してみます それは、以前のバージョンとは異なります。
しかし、それはに注意するものです。
それはおそらくになるだろう 最大の頭痛の1
あなたはスウィフトとなります発見されていること だけでも、古いコード例
数ヶ月により、使用しようとします それあなたのより現代的なプロジェクトです。
そして、それは単に動作しません。
あなたは、コンパイラエラーは、次の構文を取得しています エラー、クレイジーなもののすべての種類。
だから患者であります その、あなたがうまくいけば意志
かなりいい経験を持っています スウィフト全体的なと。
>> 今、あなたは実際にjoin--ことができると私は願っています 私たちは実際にはまだこの本year--を持っています
CS 50のAppleのApp 開発チーム、どの
あなたは、任意のアプリをインストールすることができます これは、あなたのiOSデバイス上で作成します。
その場合はこのURLを見てみましょう あなたはそれを行うに興味を持っています。
>> のだからカップル スウィフト自身についての事。
それはコンパイル言語です。
しかし、あなたはそのいくつかが表示されます 我々が使用する機能の
それが少しでも使用されることを可能にします 解釈の方法なども。
>> 構文の多くが借りています Cからそれをベースにしていますし、Cで書かれました
だから我々はそれを見ることができます 持ち帰りがたくさんあり​​ます
既存の知識から Cから私たちはスウィフトへの移植が可能となります。
>> しかし、その事があります Cから、それは非常に異なるように
これは、非常に厳密に型指定されています。
自動メモリ管理があります。
あなたがする必要がありますするつもりはありません malloc関数またはフリーのどこを使用しています。
これは、一般用に設計されています。
換言すれば、あなたはそれを使用することができます アップルウォッチからコンテキストのすべての種類、
iPhoneにすべての方法OS X、およびまで さらにいくつかのサーバー、さらにいくつかのスクリプト。
しかし、我々はそれを参照してくださいよ スクリプトのサポート
まだ全くありません それは他の言語です。
だから、最も可能性の高いあなたが使うことになるでしょう この独占的開発のための
お使いのMacやiPhoneで。
>> そして、それは現代的な機能をたくさん持っています。
そして、これらのものの多くはものであること 我々は、今日に対処しようとしています
しかしまた私達のトピックは、率直に言っています、 我々は全体のコースを捧げることができます。
で実際には、CS 51、 次の学期を提供し、
これらのトピックの多くを焦点を当てて それを以下に説明します。
だから、全体の学期を過ごすことができます これらのことを理解します。
しかし、我々がしようとしています それらを介して取得します
少なくとも十分なあなたこと 何を理解することができます
あなたが見たときに行きます スウィフトプログラムで
そしてあなたの方法をハックすることができます 最終的なプロジェクトのためにそれを通じ。
>> さて、あなたができる最善の方法の1つを これについての追加情報を取得
ただ、Appleのを通じて率直です スウィフトのドキュメントを提供しました。
APIがたくさんあり​​ます それが利用可能です。
そして、これはあなたのために良いホームベースであります あなた、特定のものを検索します
iOSのを伴うAPIでやってみたいです。
あなたがカメラを使用したい場合 たとえば、あなたはここで探し始めることができ、
また、Googleやスタックを使用 通常どおり、オーバーフロー。
>> この上の任意の質問 私たちは右にジャンプする前に？
大丈夫。
のは、上に移動しましょう​​。
>> だから最初、私が持っています 例ファイルの数。
そして、私はステップしようとするつもりです それらを通じて比較的迅速に。
これは、スウィフトのためのHello Worldファイルです。
これは非常に簡単です。
方法より多くのコメントがあります 実際のコードがありますより。
実際のコードがであることに注意してください ライン14上の一番下。
これは、印刷を述べています。
そして、それは関数呼び出しです。
我々はそれに渡しています 文字列は、ハローCS50と呼ばれます。
何のセミコロンがないことに注意してください。
何のint型メインがないことに注意してください。
のどれもありません 我々はCであった嫌なもの
我々は、このようにスウィフトを使用する場合、 単なるテキストフ​​ァイルに記述されています
そして、自分のコンピュータに保存されています 私はそれをコンパイルして実行することができます。
>> 私はここにいることに注意してください CS50 IDEを使用していません。
これは私がことを前提としてい 実行していると私はOS X上でだと、
私はXcodeはすでにインストールされていること このためには、このマシン上で
実際に機能します。
しかし、これは普通のテキストフ​​ァイルです ことを、私たちはその後、コンパイルして編集することができます。
それでは、これは実際にどのように動作するかを見てみましょう。
私はそれをコンパイルしたい場合は？
swiftc 1.swift。
一瞬または2の後に、それ 我々が今持っていることがわかります
1という名前のファイルにこれをコンパイル。
そして今、我々は我々のCS50を印刷して、 むしろ私たちのHello Worldアプリケーション。
>> 1他の事に注意してください まあ、それはデフォルトであります
我々は、入力する必要はありませんでした 新しい行を印刷する/ nを。
デフォルトでは、印刷機能で スウィフトはあなたのための新しい行を出力します。
オプションの追加を渡すことができます そうしないと、それを伝えるためのパラメータ。
しかし、それについての詳細は、Googleの。
デフォルトでは、印刷行を行います。
>> すべての権利、それではに移りましょう その後、いくつかの他のものに。
では、どのように、実際に変数を定義することができますか？
私たちは、それが使っている行うことができます いずれかの方法。
そして、私はあなたに伝えたいものを 最初は、このLET定義です。
そして、これは重要です 効果的理由
私たちがやっていることは定数を定義します。
私たちは、変数を作成しようとしています、 か名前と呼ばれる定数、
いくつかのdata--でそれを提供 この場合、文字列ダン。
しかし、このLETを使用して、 キーワード、我々が言っています
これはvariable--ことか 再び呼び出さconstant--
名前が変更されようとされることはありません。
それは全体で不変になるだろう このプログラムの期間
または全体で コンテキストの期間
その変数が使用可能であること。
>> これは、ときに非常に重要です あなたがされていないいくつかのデータを持っています
あなたのプログラムに変更するつもり、 あなたは例のさまざまなが表示されます
私たちが使用したい場合について 他の構文対させ、
あなたが聞かせ使用することをそれが重要です 可能な限り、この通知のため
それは言語 変更するつもりはありません、
そして、それは実際に実行することができます 最適化の多く
速度を向上させることと プログラムの安全性。
そして、安全性によって、私はさせない意味します 狂気のエラーが発生したことのクラッシュ
我々は可能性があること Cで見に慣れています
>> その後、我々は、文字列の補間を使用することができます 文字列の中で、これをカプセル化します。
だから我々はこの中で見ることができます 印刷行、こんにちは印刷、
して、バックスラッシュオープン括弧を使用して、 そしてその後、私の変数の名前、
この場合は定数で、 括弧を閉じます。
私は基本的にそれから入れています 名前と呼ばれるこの変数の内容
文字列の内側にして、 そこに結果を印刷します。
>> このファイルを一つの他の変更があります これは非常に上部に、私が持っているということです、
これは、シバン行に入れ 基本的には指定
私が使用すること スウィフト通訳、これ
私はもはやに持っていないことを意味 この特定のプログラムをコンパイルします。
私は、独自のスクリプトのようにそれを実行することができます。
しかし、これは後ろに、この場合には、 シーンは、コンパイルして、されています
実行中。
それは、私たちには見えないだけです。
>> すべての権利、それではに移りましょう。
だから、詐欺のビットがあります その直前に起こりました。
私は私があることを示しました 定数を定義することができます。
そして、私はそれを行うにはいくつかのデータを提供することができます。
しかし、この場合には、私はしなかったことに気づきます 実際にデータの型を指定します
それはです。
ので、それはです コンパイラ、スウィフトことができます
ちょうどベースのデータの型を推論 私はそれに入れたデータに。
それはこれを評価してそれを知っているので 変数右ここで、このデータ権利
ここで、それが文字列であることを知っています。
ので、この定数名は、したがって、あります 同様に、文字列になるだろう。
>> しかし、我々はまた、明示的にすることができます 型について
我々はのために使用しようとしています 定数または変数
この構文を使用してinstead-- 名前のコロン文字列に等しいしましょう
このケースでは、我々がいることを意味ダン、 名前と呼ばれる定数を定義しようとして。
これは、String型になるだろう。
そして、値がダンになるだろう。
今、他の方法でその 我々はvariables--を作成することができます
これらは、どの可変変数です 我々があることを、実際に行くことを意味
いつかその内容を変更するには コンテキストの期間中
その変数は、私たちをdefined--されていること varキーワードを使用する代わりにしてみましょう。
しかし、再び、デフォルトでは、あなたが知っている限り あなたがそのデータを操作する必要があること、
以下のために使用しようとしてみましょう パフォーマンスの向上。
>> この場合、私は、することができます データの型を指定します
我々は内であることを期待しています ラベルと呼ばれるこの新しい変数。
それは文字列になるだろう。
そして、私たちはその後、連結しようとしています 2つの文字列、文字列こんにちは、
文字列は、によって表されます 変数、またはむしろ定数名。
>> だから、これは、このためにいいです 多少、我々のようにPHPされます
非常に簡単な文字列の連結を持っています。
私たちは、自動的にする必要はありません メモリ管理の任意の並べ替えを使用
サイズを大きくし、実行します そこに変なものの任意の並べ替え。
私たちが実際に期待するように、これは動作します。
>> すべての権利、この上の任意の質問？
>> 今、他の理由は 私たちは、あなたが能力を持っている必要があります
何を定義することができるように、 データ変数の型があります
時には我々がいないからです 変数を初期化したいです
でいくつかのデータを持ちます 定義のポイント。
したがって、この場合には、のは言わせて 私は入力を開始したいこと
グレードブックにいくつかのグレード。
さて、私は知っているのいずれかのこと 私はなりたい変数
変更可能な等級になるだろう。
そして、我々はまた、私たちを知っています それは整数になりたいです。
しかし、おそらく我々はまだありません そのグレードを用意して。
>> スウィフトでは、あなたがする必要はあり データのタイプを定義します
それが関連付けられています 変数または定数ましょう
あなたが実際にできるようにするには その変数を使用します。
それが厳密に型指定されているので、 あなたはタイプを関連付けする必要があります
これらの変数を持ちます。
>> この場合はそう、私は正しくないしている場合 いくつかの値を持つ最初の初期化、
私はスウィフトを伝えるために必要なもの 私は、データ型があることを期待しています。
そして、それが残っているために起こっています 同じデータタイプ
このプログラムの歴史を通して。
>> 今、あなたはできるだけ早くたくなるかもしれません 私は、このグレードの変数を作成しました
それ提供 100の整数であり、今私の場合
連結してみたいです その整数の文字列、
まだ使用するたくなるかもしれません その文字列連結演算子
以下のような私たちは、わずか数行の前にいました。
しかし残念ながら、 これは実際にはしません
仕事、あなたがしているので、 基本的に実行します
二つの異なるタイプの操作。
>> さて、これは他とは大きく異なります 実際にあるPHPなどの言語
種類の彼らの一種でlooseyガチョウ。
彼らはただ、ええ、似ています 何でも、私は気にしないでください。
ちょうど私一種類を与え、 多分私は正しいことを行うだろう。
>> この場合、スウィフトは、 タイプについて非常に厳しいです
あなたが扱っていること。
この加算演算子 または連結演算子
基本的にのカップルを持っています 別の可能なオプション。
あなたは、加算を行うことができます 整数、またはあなたと
文字列の連結を行うことができますし、 おそらくいくつかの他のものと同様。
しかし、オペレータが認識しない場合 それの両側に何ですが、
またはそれらの組み合わせではなく 二つのタイプは、それを期待しているものではなく、
それは故障の原因になるだろう。
>> したがって、この場合には、何を意味し 文字列プラスの整数を持っていますか？
まあとの関連で これは、我々はおそらくしたいです
文字列の連結操作をすることができません。
しかし、もちろんコンピュータ コンテキストの並べ替えを持っていません。
そして、私たちは提供する必要があります その追加情報
それはそれは何を知っているように 私たちがやりたいということです。
>> 換言すれば、実際 スウィフトは強く型付けされていること
あなたがしなければならないことを意味 追加作業を少し
それが動作するように取得します あなたが望む方法。
しかし、結果として、それが安全です。
そして、あなたが持っている一度取ります これらのタイプを考慮に入れ、
物事はちょうど率直開始します かなりうまく動作するように。
>> したがって、このケースでは、次に希望 文字列の連結を行います
明示的にキャストすることにより 文字列の整数
このでそれをラップすることにより、 資本S String関数、
して、文字列連結を使用して、 オペレータは、私たちのラベル変数を変更します
し、それをプリントアウト。
>> ここまでは順調ですね？
すべての権利、のがに移りましょう。
>> 今様々なデータがあります 我々はスイフトで使用できるタイプ。
あなたがに慣れてきたように、 我々は、変更可能な配列を作成することができます。
そして、その配列ができるだけで シングルタイプが含まれています。
>> したがって、この場合には、我々が作成しようとしています 整数の可変配列、どの
我々は成績を呼び出します、我々はできるようになります この角括弧でそれを保存します
あなたが慣れてきたようなフォーマット 他の言語の様々なへ。
しかし、ここで私たちがしていることに気付きます 物事のカップルを定義します。
グレード変更可能variable--です 我々はletキーワードを使用しません。
だから、私たちは、その後変更できることを意味します この配列の内容。
これは、Array型intのあります 私たちはそれを伝えることができます
ここではこれらの角括弧に基づきます。
>> すてきなものの今1 このことについて、我々は、
多くのへのアクセス権を持っています 追加情報
ちょうど使用して、配列について いくつかの単純なドット表記。
ですから、例えば、 grades.countは、私たちに提供して
その中に存在するアイテムの数 私たちはその後、かなりアクセスできる配列、
簡単に、単純にそのドット表記を使用して。
>> 追加の追加したい場合 この配列の項目、
あなたは、PHPのスタイルを行うことはできません あなただけ明示的に定義する場合は、
指定されたインデックスにある、いくつかの値 あなたが挿入すること。
代わりに、追加を使用 配列型のメソッド
このリストに、その項目、95を追加します。
>> だから今、この配列には、以下があります 100、0、90、85 contents--。
そして今、我々は、添付しました それに95にも。
>> 他の方法があります 我々は物事を追加することができます。
あなたが実際に使用することができます 合計演算子、
解釈されます 配列操作を追加します。
そして、あなたはその後、別のものを追加することができます その内容は70と80であり、配列、
その配列へ。
だから今、私たちは持っています この変数内のコンテンツ
100、0、90、85、95、70、及び80をgrades--。
これはただのちょっといい構文的です スウィフトは、私たちに提供して砂糖。
>> だから我々は、合計したい場合 グレードは、我々は、おそらくです
反復するためにするつもり このループ内のすべての項目を超えます。
そして、我々は、スウィフトに、概念を持っています あなたが期待するように、ループのための。
しかし、我々は示している方法 範囲は若干異なります。
したがって、この場合には、へ すべてを合計し、我々はよ
一時的に作成するつもり 私たちのために順番に和と呼ばれる変数
このカウントを維持します。
>> そして、私たちのために気付きます ここでループ構成。
0のインデックスのために.. <grade.count。
したがって、この構成により、0 .. <grades.count 我々はレンジ動作であります
我々が作成しようとしているという 0から最大の整数の範囲
しかしgrades.countを除きます。
これは、0、1、2、3、4となり 5、アップしかし多くの1まで
grades.count前。
>> だから、これはどのように我々は異なっています ループに一般的に使用されるだろう
あなたは、いくつかのインデックスを持っているでしょうどこ 変数、最初は0に等しく、それを設定し、
して、いくつかのことまでを統合 アイテムの数よりも小さい値
その配列インチ
>> だから、変更があります これに対して、実際に、
これは私たちは非常に簡単にできるようになります 範囲の種類を設定します。
あなたはこの範囲を変更する場合 3つのドット、0 ... grade.count、
これは、範囲を示し0 包括grades.countします、
その数でもあることを意味 その範囲に含まれます。
>> しかし、これは非常に便利です これらの正確なもののために、
我々は実行する必要がある場合 ループオーバーの繰り返し
これらのインデックスはゼロがインデックス化されているため、 我々は他の言語で見てきたように
同様に。
このforループ上の任意の質問？
>> だから、暗黙的な定義があります このインデックス変数の、
その値は0から始まり、 すべてのループの繰り返しで継続
ポイントまで1ずつ増加します それはgrades.countに等しく、
その時点で、ループが中断されます。
>> 私たちの文字列内のことに注意してください ここで補間、
私たちは、実際にいくつかの簡単なを行うことができます これらの値を操作。
だから、インデックスに1を加えたが、実際になります その値の加算を行います
インデックスがであるため この場合、整数。
その時点で、それは、意志 その後、文字列に変換します
そして、、ここで、この文字列に補間 私たちは期待通りにプリントアウト。 。
>> そして素晴らしい事 配列についてはこちらです
我々はまた、持ってできること フェッチ値と設定値
角括弧表記を使用して 我々は、他の言語で見てきました。
>> すべての権利、ここから、私たちは今では 私たちの学年のすべての私たちの合計を計算します。
次の今の並べ替え 論理的なステップは次のようになります
見つけるために除算演算を行うには これらのグレードの平均アウト。
しかし、重要な何か ここで起こっています
この合計は、おそらく整数であるということです。
しかし、我々はいくつかを実行する必要があります ダブル分裂の一種。
そして、これはあることを行っています ときに非常に重要
我々は、この操作を実行します、 私たちが言っているので、
私たちが実際に必要だということです 2ダブルスで除算を実行。
そして再び、スウィフト理由 非常に強く型付けされ、
我々は、明示的にすべてを設定する必要があります 実際に私たちの前にダブルスのアイテム
その操作を実行します。
>> ために私たちのためにそう 二重除算を実行、
それはちょうど1のために十分ではありません これらの項目の2倍にします。
それらの両方があることを持っています 迅速ためには二重
このことを確認します 私たちが何をしたいです。
だから私たちはその後、明示的に型キャストします 我々は上で計算しました和
そして、ダブルスの等級の数、 その操作とストアを実行します
、この新しい変数に、というか 平均と呼ばれるこの新しい定数、
どのようなタイプ、あなたが想像しているのだろうか？
ダブル、ええ。
この場合そこで、 それを指定する必要はありません
それから推測することができるため データ平均の動作がどのようなタイプ
なります。
そして、スウィフトは、一般的にかなり良いです 種類を推測することができます。
>> あなたはこれを見たいと思ってください 実行するか、または私が上に移動することができますか？
私が行く維持したいです。
このいずれかの上の任意の質問？
グレート。
>> 今、私たちは、に到達するために開始するつもりです 関数を定義する良いですstuff--、
そして、されている他の種類のカップル あなたが持っていないスウィフトに固有
他の言語で見られます この時点までは、
しかし、彼らは他に存在しています あなたが後で見つけるかもしれない言語。
だから、最初のあなたがしたい場合 関数を定義するために、
あなたがファンキーな言葉でそれを定義します 機能、及び、関数名
して、括弧で、引数 あなたはその関数が受け入れるようにしたいもの。
引数もしなければなりません specify-- generally--
また、そのデータの型を指定する必要があります 彼らは推測することができない限り、彼らは、あります。
そして、我々はその少しが表示されます ほんの少しで警告。
>> したがって、この場合、我々は printGradeCount、呼び出される関数です。
我々は受け入れるつもりです variable--というか、この場合には、
評定表と呼ばconstant--。
そして、それはであることを行っています 整数の配列を入力します。
今何かがあります それは、ここで本当に重要です
ことを私はあなたが理解したいです。
これは、デフォルトでは、これらの引数であります この関数への入力されていること
暗黙的なletキーワードで定義され、 これは、私はこれを変更できないことを意味します
ここで評定表変数。
そして、その種の、理にかなっています あなたがデータを渡しているからです。
そして、あなたはおそらくそれをしたくありません あなたの下から変更します。
これは、明示的に言及することが可能です これは、変数が入れてあること
ここでvarキーワード。
しかし、それは私たちがきた落とし穴があります 気づいた人は、過去に行っています
彼らはそれが起こっていることを想定していることです 可変にすると、実際には、それ
定数です。
>> すべての権利なので、ここでは、その後、この場合には、 我々はすべての戻り値の型を指定していません。
私たちは何をする方法を紹介 一瞬でその。
しかし、ここで私たちが持っていることに気づきます 条件であれば、単純な。
評定表がある場合 空、これはこのケースで
この整数のちょうど性質であります 配列は、その後、我々は何かをプリントアウト。
そうでなければ、私たちは何かを行います。
>> 非常に単純ではこれまでのところ、私は思います。
ご質問があればしかし、私を停止。
>> 今、この関数は、平均は、またかかります いくつかの引数、あるいはむしろ一つの引数、
これ評定表であり、この時間 double型を返すために起こっています。
それが計算されているので 平均それはです
実際にそれを返しに行きます 呼び出し側の行に計算された平均。
>> ここでは、指定します 矢印の後に型を返します。
そして、これは感じるかもしれません 最初は奇妙なの一種。
あなたは慣れて成長しました リターンを設定します
関数名の前に入力します。
しかし、あなたは、この考える場合 数学の面で、
あなたは数学を持っているときのような それは、関数を定義し、
あなたには、いくつかの関数を持っています 入力は、それが出力を生成します。
そして、それは正確に何です これは模倣することになっています。
そして、他の言語のカップルがあります それは同様に同様の構文を持っています、
おそらくどれもその あなたはCS50で見てきました。
しかし、まだそれに惑わされてはいけません。
矢印が起こっていることを意味し この場合に返されます。
[OK]を、ので、どのように我々が行っています この平均を計算するには？
まあ、もし評定表 空で、よくして、私たちはしています
これは多分、0を返しに行きます これを治療するために合理的な方法。
私はのが来るように、知りません バック少しのそれに。
これは実際にはないかもしれません 合理的な方法であります
場合、平均を計算します 私たちは、空の評定表を持っています。
>> そして、私達はちょうど私たちの合計を実行します。
私たちは実際にここに注意してください の代替バージョンを持っています
私たちが次々に取得することができ、ループのための 配列内のすべての単一の項目の上に
各要素を配置 独自の変数に。
にグレードのために指定することにより 評定表、我々は何を言っています
我々は暗黙のうちに行っているということです 呼ばれる新しい定数を作成します
表現するために起こっているグレード 評定表内のすべてのユニークなアイテム
毎回、ループを反復処理のため。
初めてだから それは、グレードの意志を実行しています
評定表の最初の項目で。
二回目は、それができるでしょう 第二の項目、というようになど
評定表を持ってまで、 要素それ自体を使い果たし。
その後、我々はそれを合計することができるようになります 私たちの総和変数にグレード
私たちの平均を返します 我々は前に見てきたように。
[OK]を、任意の質問？
はい？
聴衆：私は2つの質問があります。
ナンバーワン、仮に、することができます あなたはこの1に整数を実行しますか？
である必要はありません ダブル、それが正しいのですか？
DAN AMRMENDARIZ：することができます その質問を繰り返しますか？
聴衆：私は行うことができます 平均値として整数？
DAN AMRMENDARIZ：することができます 平均として、整数のですか？
だから、整数を返します 代わりに、二重の平均？
>> 聴衆：あなたをReturn-- 今、以下のことを持っています。
DAN AMRMENDARIZ：右ここで、0.0を返しますか？
観客は：ええ、ちょうど0を返します。
だから、どちらかになります 80または85ではなく、85.2。
>> DAN AMRMENDARIZ：だからその場合には、 そうカップルの異なる方法があります
それに答えるために。
私は順番に答えてみましょう。
だから私はちょうどこのリターンを行った場合 0,0は、整数値です。
そして、そのためには、原因となります この場合のタイプのエラー
それは二重に期待しているので、 しかし、整数を返しています。
私は整数を返すようにしたい場合は、私がすることができます。
私は、戻り値の型を設定することができます 、int型ここでは0を返すために、
ダブル除算を実行しません。
しかし、その後、私たちは次のようになります 整数の除算を行います。
そして、私たちはその後、得られないだろう 我々は、おそらく期待していることを平均。
しかし、はい、私たちは変更することができます その方法でタイプ。
>> 聴衆：そして第二に、あなたは 上に1ダブルを持っています。
しかし、下方に、ときに ダブルダブルを返却します、
それは自動的にすでにです ダブルフォーマットを返します。
なぜあなたはまだそれを定義する必要があります ダブルと上部の矢印の付きましたか？
>> DAN AMRMENDARIZ：だから 場合には、これが一部であります
のthe--ので、質問を繰り返します それはリターンからの暗黙のだから
ここでは種類、実際にどのようなタイプの本 で、我々はスウィフトと明示する必要があります
私たちがしたいかについて この関数の外に戻します
それが実行時に入力することを チェック、それは確認することができます
私たちが実際に何を書かれていること 実際に、以下のダウンそれに準拠しています。
だから、一種のチェックのようなものです 状況の自分に並べ替え。
しかし、そこにare--
>> 聴衆：[聞こえない]矢印？
>> DAN AMRMENDARIZ：ケース時があります。 我々は暗黙のうちにできるように指定することができます
戻り値の型を設定します。
しかし、この場合には、私はしないでください それが働くだろうと思います。
他のいくつかの構文があります 我々は後で見ること。
>> すべての権利なので、このソース コー​​ドは少し異なっています
これは、からの引数を解析するため、 私たちが呼んでいる関数。
私はそれがどのように動作するかをお見せしましょう 私たちは実際に移動する前に
いくつかの興味深いものに それは、スウィフトに起こっています。
>> この場合はそう、私はこれを実行する場合 コー​​ド、それは何をやっていることに気付きます
is--が、種類の 私は奇妙なエラーが発生します。
私はそれをのカップルを渡す必要があります コマンドライン引数として整数。
それでは、150と80を見てみましょう、と入力してEnterキーを押し それは実際にやっているかを調べます。
これは、それぞれのを受け入れています 整数として、これらの値。
これは、評定表にそれらを入力します。
そして、それは実行です その平均計算
私たちは期待通りにことを出力します。
>> しかし、明らかに何かが起こってあります この拒否何かで上
整数として何か。
あなたは私たちがいたときから思い出すかもしれませんが コマンドライン引数を扱います
Cおよび他の言語で、非常に最初の そのコマンドライン引数で0番目の項目
リストには、コマンドの名前です。 私たちは、実際に実行されたこと。
したがって、この場合には、私はループです すべてのコマンドライン引数を超えます。
しかし、私は空想の任意の並べ替えをしていませんよ その最初のものをスキップすることを確認してください。
私は明示的にだか私は暗黙的です これらのタイプのチェックをします
整数は実際に私の前にあります この計算を行います。
>> そして、それは本質的です ここで何が起こっています。
内のすべての引数に プロセスの引数、
私はいくつかのチェックを実行するつもりです。
そして、この場合には、私は行きますよ 最初の変換しようとします
による整数にその引数 明示的な型キャストを実行し、
それは、入力時に、文字列であるため、 そして、ではない実際には整数です。
>> しかし、これは奇妙な構文の一種です、 せ等級はINT（引数）に等しい場合。
実際に何が起きています ここに非常にあります
あなたの使用してスウィフトに重要。
これは何を使用しています オプションのタイプと呼ばれます。
>> したがって、この関数、INT（引数）、 だけでなく、整数が、リターンを返します
オプションの整数何と呼ばれています。
そして、これは一種のです タイプの上に種類。
あなたは、ソートのようにそれを想像することができます それは、パッケージのように戻っています。
そして、あなたがそれを開くと、 パッケージ、それのいずれか
結果の整数を有し、または それがすべてで、その中に絶対に何もしています。
そして、これはエラーチェックとして有用です なぜなら、この場合のメカニズム、
私たちが知ることができ、これをしました 型変換に成功？
それがあった場合、それは実際には 内部の整数を持っているつもり。
それ以外の場合は、いくつかを持っているために起こっています 私たちは、nilを呼ぶその値
全くの整数を表しています。
それは本当に何もないの代表です。
>> だからこのような構成であれば 私たちはそのパッケージをアンラップすることができ、
オプションの結合こと。
そして、我々はそれをアンラップすることができれば パッケージ化し、内部の整数を見つけ、
その後、私たちは何を言っています ここで、我々はその後、ということです
その値がに設定されることを可能にします グレードと呼ばれるこの定数。
そして、if文のこの部分、 if文の上部
そのため、実行されます アンラップは成功しました。
>> それはちょうどので、それが発生した場合 エラーは、おそらくありました
この明示的な型変換で 文字列から整数へ、多分
それは、例えば値ABCです。
そして、それは実際に行くのではありません 整数に変換します。
そしてそれは、nilを返します。 これは整数ではありません。
そして、このif文をよくして失敗します。
ため、存在しませんグレード それは整数コンテンツがありません。
そして、それは代わりに、この他のブロックを実行します。
はい？
>> 観客：無記号は、N-I-Lのですか？
DAN AMRMENDARIZ：nilがはい、N-I-Lです。
>> だから、これは多分の一つであります スウィフトについての最も困難なもの、
あなたはにいる場合は特に iOSアプリの雑草
あなたが実際にしようとしています そこにいくつかの開発を行います。
それは叫んことになるだろう オプションのあなたに。
それはのためにあなたを求めことになるだろう 疑問符と感嘆符。
しかし、あなたはあなたの場合out--把握したら 考え出すにいくつかの時間を費やします
何は、オプションの種類で起こっています、 あなた自身に頭痛の多くを保存します
あなたがしようとしているとして、 スウィフトでアプリケーションを記述します。
>> それは実際には非常に強力な機能です。
そして、あなたは、単にする必要があります 今のところそれは私の言葉を取ります。
しかし、我々はこのような構成が表示されます および他のいくつかはそれが好き
そのほかのソースコードの一部で 我々は少しだけであなたを紹介します。
>> 任意の初期の質問がここにありますか？
だから、重要な持ち帰りはということです オプションの種類は、メタタイプの一種です。
このどちらかの値を持ち、 それがない場合、それ
おそらく、その値が関連付けられている必要があります それと、またはそれは全く価値がありません、
それはゼロで表されます。
これの残りの部分は、おそらくです あなたは期待通り。
>> それでは、ランプアップしましょう 難易再び。
そして、この時間は、のいくつかを見てみましょう 実際に存在する他のデータ型。
その一つがある、辞書であります Pythonの辞書に非常に似ています。
これは、ハッシュテーブル内にやや似ています C.それは本質的にキーのマッピングです
キーは文字列であることができる場所。
そして、あなたはそれらのキーを検索するとき、 これらのキーの値を持つことになります。
だから、それは非常に配列ではないですが、 代わりに、より密接に関連します
ハッシュマップやハッシュテーブルへ。
>> それでは、これを想定している方法を見てみましょう 実際に私たちの前に動作するように
ソースコード自体に入ります。
私はこれを実行すると、 何も実際に起こりません。
それは私が期待していていることを私に言っています 以下のタイプのいくつかのパラメータを設定します。
だから私はに提供するつもりです それの名前を設定し、いくつかの問題、
そうPSET0、多分私は100を得ました。
そしてPSET1、私は5を得ました。
そして試験で、私 本当によくやったと30を得ました。
そしておっと、私はここでスペースを打ちます。
>> 私はEnterキーを押したとき、あなたが見ることができます それはいくつかの計算を実行します。
これは、評定表が3であると言います グレード、PSET1、PSET0、試験。
そして、評定表を持っています この特定の平均。
だからもう一度、私たちは取り組んでいます この評定表の考えと、
しかし、我々は反復継続するつもりです 私達の機能の複雑さを持ちます。
>> だから開始時に、私たちはしています 関数を作成しようとしています
使用を印刷するための責任があります。
そして、この出口があります その機能だけでしょう
強制的にアプリケーションを終了します。
これは、そのものではありません あなたがiOSアプリに使用されます。
これは、この場合には、唯一であります コマンドライン引数を指定して。
次に、Xcodeのに向かって移動を開始します。
しかし、これはコマンドに固有のものです スウィフトのラインスタイルのプログラム。
>> のがのいくつかを見てみましょう ここで興味深いです。
の夫婦のみ、見てみましょう 興味深いことは、おそらく言及します
それは私の関数であります 等級の数を印刷し、
私はそのリストを持っていたことを思い出すかもしれません items-- PSET1、PSET0、及び試験の。
あなたが実際にすぐにすることができます そして、簡単にこれを行います
で評定表を取ることによって、 キーと値を持つ辞書。
キーのすべてが通っているの検索 ここでは、ドットキー方式、
そして、このjoinWithSeparatorを使用し、 その後、すべてのキーを取るであろう
我々が入力したこと、またはpset1-- 申し訳ありませんが、PSET0、PSET1、およびexam--
そして、一緒にそれらを連結 コンマとスペースを使用して、
1つの長い文字列を作成します。
この結合操作だけで驚異的です 様々な状況において有用です。
そしてそれは、このjoinWithSeparatorです。
>> そして、これだ一つのことです スウィフト1からスウィフト2に変更。
ありました あなたがしている場合Pythonはstyle--
Python--のPythonに精通 スタイルは、文字列のメソッドを結合します。
しかし、それはもはやありません スイフト2の場合。
あなたがしたい場合は、これを使用したいです ものの配列を連結します
一緒に文字列を持ちます。
>> だから、おそらくその後の当社 前の平均の議論、
それはもう少し理にかなっています 私たちは、平均的な機能を設定するために
むしろ任意の二重であることを ちょうど明示倍以上。
我々はそれを持っていたので、 異常な状態ここで、
実際にどのような評定表の場合 その中に値がありませんか？
平均リターンは何べきですか？
>> まあ多分Cであなた 何かをやっているだろう
同様に、センチネル値を与えたような 0.0、または多分負の数、
ただ事実を表すか何か いくつかのエラー状態が存在したことを
あなたは、おそらく実際にはありません その平均値を計算する能力。
さて指定の美しさ オプションの種類は、それを行うことであろう。
そして私は今、すべてのこれらの言葉を言ったが、よ これは実際にoptionalsを使用しません。
しかし、私たちはただのそれが表示されます 我々は平均設定できる分
ように任意のデータ型であることが 実際、その後、いくつかのデータを返す場合
私たちは、そのデータが返されます。
そうでなければ、我々は戻ります nilが、このことを言って
意味のある計算を持っていません。
>> のは、何か他のものに移りましょう。
だからここから、私たちは見てきました コマンドライン内のすべてのこれらの例。
しかし、実際にあなたが行っているもの 対処することのXcodeです。
約すてきなものの一つ Xcodeのであり、具体的スウィフトで、
我々はこれを持っていることです 遊び場というもの。
や遊び場があります ていないすべてのiOSアプリで。
しかし、それはあなたが試すことができます 非常に簡単な方法でスウィフトと。
あなたはすべてのコードを入力することができます。
これは、構文は、ここで強調表示きれいです。
新しいファイルを作成すると、それが要求されます あなたは、遊び場を作成したい場合。
しかし、遊び場のいいところ それはあなたのウィンドウの右側にあり、
それは実際にあなたを示してい あなたのコードの出力。
私は下にスクロールのであれば、我々は何を見ることができます コー​​ドの種々のラインの出力
実際にあることを起こります。
>> したがって、この場合には、我々はするつもりです 方向に少しだけを変更
本当に何かについて話します この高レベルの方法に重要な
スウィフトが動作すること、およびそれ クロージャのこの考えはあります。
そして、あなたはおそらくこれを見てきました JavaScriptで少し。
そのあなたのそれらのために CS50であり、閉鎖
行うための非常に人気の、非常に良い方法です 現代語での高レベルのもの。
しかし、それはまたのようなものの難しいです 初めての周りにあなたの頭をラップします。
だから、この見た場合 初めて、それは大丈夫です。
ただ、ソースコードを見て、参照してください。 あなたは自宅でそれを把握することができます。
>> したがって、この場合には、のは、我々を言わせて 指数の多くを作成したいです
いくつかの固定値を持ちます。
したがって、この場合、私は関数を作成することができます。
私はの力を呼び出すつもりです 生活の中で2その唯一の目的
いくつかの入力とダブルを取ることです それは、その値を返します。
私はここにいることに注意してください データの種類を受け入れます。
これは、xという変数になるだろう。
これは、double型のです。
そして、私はここにダブルを返すつもりです。
そして、私はちょうど何をするつもりです 非常に、率直に言って、かなり
この値を倍の素朴な方法。
そして、私はあなたの理由はこれを紹介します ちょうど第二に有用です。
>> ここで我々は、この範囲を持っていることに注意してください またですか。 1で何かのために、ドット
ことを意味し、ドットドット、2、 このループは、二回実行されます。
しかし、これはダミー変数を表します。
それは私が実際にするつもりはないことを意味します どこでもその変数を使用します
このループの内側。
私はこの行をしたいです 二回実行するコードの、
知らなくても、 その範囲の値。
>> したがって、この場合、私は結果を実行していますよ 時間は本質的に、二度xは
私は、この値を二乗していことを意味します。
そして、これは、たまたま 私たちは期待通りに動作します。
2のべき乗の値を渡します 2.0は私たちに4の出力を提供します。
10.24 3.2作品。
>> 今、私たちは同様の操作を行うことができます 3のパワーのためのもの。
しかし、今だけの範囲を変更します。
1でダミー変数について 3を介して、3倍を掛け
そして、同じことを行います。
>> だから、これは少し不自然な感じかもしれません。
しかし、重要なのは、あります ここにいる事
これらを見ていることです 2つの関数があります
違うだけ一つのこと、 どの範囲でこの値です。
これらの約2他のすべて 機能、3のパワーと2のパワー、
実際には、同一の理由 彼らは同じように動作します。
>> したがって、この時点で、少し 警報ベルはオフに行くべきです。
うまくいけば、あなたは何を言っています、 あなたが知っている、これは少し感じています
作業の重複などがあります。
おそらく、その私がするような方法があります このすべてをカプセル化することができます
機能を提供します またはその機能を作成します
まさに私がすることなく、欲しいものありません 明示的にそれを入力する必要が。
そして、これは何の力であります 閉鎖の私たちが行うことができます。
それでは、これを見てみましょう。
そして、私はカップルを費やします このため、この上の分、
スウィフトのためにかなり重要です。
我々は、このすべての時間を参照してください。
私たちは、関数を定義しようとしています。
それはpowerOfと呼ばれるようになるだろう。
それは受け入れるだろう パラメータは、int型のyと呼ばれます。
しかし、戻り値の型を見てみましょう。
戻り値の型は、です 括弧、二重矢印ダブル。
この機能することを意味します、 この機能powerOf、
関数を返しています。
それは二重を受け付けています そして、ダブルを返します。
だから、一種の狂気に聞こえるかもしれません しかしそれでは、少し下にスクロールしてみましょう
何が起こるか見るために見てください。
我々は、この機能powerOfの中にいます。
私たちは、新しい関数を作成しています exponentiatorと呼ばれます、
しかし、それはそれが何であるかは重要ではありません。
>> これは持っていることに注意してください xの入力値。
そして、それは二重にかかっています そして、ダブルを返します。
そして、これは、我々と同じコードであります 2の値ことを除いて、上で見ました
または3の値は、その その範囲で上限、
で置換されています Yのこの値は、どの
初期パラメータでした 私たちのpowerOf関数の。
そして、この時点で、我々 exponentiatorを返します。
私たちは、関数を返しています。
>> それは一種の少し心が吹いようなものです。
しかし、それでは、何が起こるか想像してみましょう 私は、この関数を呼び出すときpowerOf
し、そこに2のようないくつかの値を渡します。
これが意味することです 私は今の値を持ちます
この値ことを意味し、Y 2、 このexponentiator機能のY
その値2になります。
しかし、私はこれを返しますよ exponentiator機能。
>> だから、スウィフトは、私が言っていることに気付きます このケースで作成されました。
正方形は、それが定義されていてみましょう ダブルを受け付ける機能
そして、ダブルを返します。
私は関数を作成しました 二乗何かその
右ここでこのメカニズムを使用して。
そして、実際に何が起こっているかであります それは、この関数を返していること
exponentiatorが、この値 yがその中に包まれています。
そして今たびに私はこれを使用します 変数またはと呼ばれるこの定数
正方形、それが起こっています 機能として動作するように。
そして私はその変数を呼び出すことができます 私は関数を呼び出すことになるように、
そしてその中に番号を渡します、 このケース3のように。
そして、私は、この値を二乗します。
だから、3はその後になります平方しました 我々がここで見ることができるように、9になります。
>> 本当に狂ったが、今この 私に機会を可能にします
他powerOf関数を作成します。
私は今私が欲しいだけでなく、[OK]を、言うことができるのように 新しい関数を作成するには、powerOf（3）、
とにそれを保存します 定数はキューブと呼ばれます。
そして今、キューブがあることを行っています その後意志別の関数
入力と立方体として、いくつかの値をとります 私たちは一番下の行に見ることができるように値
ここに。
2のキューブが8になるとしています。
>> うまくいけば、かなりきちんともの。
あなたは前にこれを見たことがありません。
私は、クロージャに見てことをお勧め この少しを調査。
それは、私たちは多くのことを本当に強力なものを参照してくださいます JavaScriptで、いくつかの他の言語。
それはには本当に重要です 同様のAPIを理解します
私達はちょうど秒でに取得しますことを。
はい？
>> 観客：あなたは powerOf（2）、括弧、およびその後
別のかっこ、別のinput-- あなたは、基本的には、正方形を交換しています。
DAN AMRMENDARIZ：だから見ます ここで非常に最後の行で。
これは、実際に完全に可能です あなたが示唆したように連鎖することを行います。
だからpowerOf（5）私たちが行っていることを意味し ここまでの5のexponentiatorを持っています。
だから、これは本質的になるだろう 5乗〜4と同じもので、
我々は累乗を作成しましたので、 5乗する機能、
我々はに渡しています その値4を機能。
そして、我々はその値を取得します 我々は、1024年に期待しています。
聴衆：そして、それはありません 名前なので、それが容易になります
、どのような広場を読み取ります。
>> DAN AMRMENDARIZ：右、正確に。
だから私はちょうどそれを置く前に、 ここで定数にそう
それはその名前を使用することが容易になるという。
はい？
>> 聴衆：この文脈で powerOf、それは一部です
プログラミング言語の 方法あなたとは対照的に、
[聞こえない]にpowerOf考えますか？
DAN AMRMENDARIZ：だから この場合、powerOf
単にの名前です。 私はここに定義した関数。
だから、固有ではありません 言語自体に、
その代わりに、それだけです 持っている機能
私はそれにその名前を与えるため、その名前。
その他の質問は？
大丈夫。
>> さて、これは素晴らしいです。
しかし、あなたが参照するつもりはありません その閉鎖機能の多く
あなたが定義するところの内部には、このようなものです 一つの機能、別の関数の。
そして、あなたはそれを行うことができます。
しかし、それは一種のではありません 右、本当に必要？
私はこれを定義しない理由と同様に exponentiator呼び出される関数
そしてその後すぐにそれを返します。
できないのはなぜ私だけですぐに この機能を返しますか？
>> 実際に、これは正確です 呼ばれる概念の背後にある考え方
匿名関数、 匿名関数は実際にはありません
彼らので、名前を持っています 1を用意する必要はありません。
だからこの場合は、図7（b）で、 我々は正確にそれを見つけることができます。
それは、すべて同じコードです まったく同じことを行い、
しかし、今は少しので、それを変更しました すぐにこのpowerOf機能その
関数を返します。
復帰後ことに注意してください、 オープン中括弧があります。
それは、この入力ダブルを期待しています。
これは、出力ダブルを期待しています。
そして、中のキーワード コー​​ド自体を分離します。
だから、これは匿名関数です。
これは、実際のに対し、名前がありません 前にそれがexponentiatorと呼ばれていました。
しかし、我々は本当に、見たように exponentiatorを参照していませんでした
その関数の外。
だから、問題ではありませんでした。
したがって、この無名関数です それは無名であるため、いわゆる、
それはまだ使われています このコードのコンテキストインチ
>> 私は次のカップルのもの うまくいけば、継続して行きます
あなたの心を少し吹い。
我々はさらに、これを簡略化することができます。
鋭くあったようにあるため 先に指摘しました
おそらく、私たちが実際に知っている、によって 何、このコードから推測
このコードの出力は次のようにしようとしています。
そして、実際には、この無名関数で、 我々は、実際にはデータの種類を推測することができます。
>> したがって、この1で、私たちはもはや 明示的に定義する必要があります
のデータの種類 この関数からの入力および出力
いくつかの理由。
一つは、アップ、我々が定義したということです 外側の関数のプロトタイプ、
どのようなタイプのデータのこの匿名 関数は、入力および出力する必要があります。
そして、他から、我々 コー​​ドから推測することができます
ダウンここで私たちが受け入れていること ダブルタイプのものであり、入力
そして、ダブルを返します。
>> ここで我々は、明示的に持っていないことに注意してください 引数の名前を定義しました
この関数は受け入れていること。
だから私たちはを参照することができます参照してください。 $ 0、$ 1を用いてこれらのパラメータ、
ようになどに応じて、 そのパラメータの数は、使用
この機能インチ
>> これは、あなたが行っているものです 多くは、このオープン中括弧で確認してください
定義が続きます $ 0とし、その後、いくつかの操作、
して、閉じ中括弧。
それは無名関数です それは、この動作を実行します。
それはどこに、このパラメータを持っています それは型が推測されているのです。
つまり、最初のパラメータは$ 0です。
そして、いくつかの操作があります その$ 0にある起こっ。
>> 聴衆：だから、ドル記号 基本的パラメータを意味し、
0は最初のものを意味しますか？
DANアルメンダリス：それは正しいです。
だから、ドル記号は、基本的に意味します パラメータは、0は最初のものを意味します。
しかし、それは特異的に働きます 私が命名されていないこの場合、
私の無名関数で引数。
>> 聴衆：Perlや何かを持っています そこにこのドル記号、ドル0？
DANアルメンダリス：私は申し訳ありませんが、これはいますか？
観客：Perlは持っています このドル0、ドル1--
DANアルメンダリス：私はないんだけど Perlであまりにも精通して、
しかし、PHPは何の変数を定義します ドル記号に基づきます。
そして、いくつかの言語があるかもしれません このような機能を持っています。
実際には、スウィフトは借用 このような機能の多く
他の言語の多くから。
我々はそれにはPythonのヒントを参照してください。
タイプのこの定義 OCamlのから来ているようです。
そして、私たちはただの全体の束を持っています 異なる言語のロットからのもの。
それは素敵なの一つです スウィフトに関するもの
それは最高の多くがかかっていることです 言語の束からのアイデア
そして、一緒にそれらをすべて靴べら 1つのスーパーの言語に。
実際には、あなたは私ができるようにする場合 あなたの心を吹い続け、
私たちはこのすべてを行ってきました。
我々は、おそらく、この小さなを簡素化することができます もちろん、それを実現することにより、ビット、
スウィフトは累乗を持っています 機能が内蔵されています。
私はダーウィンをインポートする場合、これは それだけのライブラリです
捕虜と呼ばれるこの機能は現在、特徴 私は、関数の私の力を簡素化することができます
以下であることを。
それは戻っされようとしています この無名関数。
>> しかし、これは今どのように単純な見てください。
これは匿名関数であります データのいくつかのタイプを受け入れています、
そして、それは1になるだろう 引数具体的には、
double型のである$ 0参照。
これは、タイプダブルを返すために起こっています。
しかし、returnステートメント 今暗黙的です。
>> そしてそれは、この正確なスタイルがあること 、スウィフトに非常に、非常に普及しています
あらゆる所に。
私たちはこれを見てするつもりです スウィフトのすべての時間。
だから私はこのすべてを示しています あなた、この構文のため。
これは非常に一般的です それを意味し、表示するには
匿名関数であります それが実行されます
これらの引数のいくつかの操作。
そして、暗黙のリターンがあります。
だから、絶対に同じものです 私たちはここ、これを言うの。
>> この巻き毛のため ブラケットは関数であり、
私たちは、この操作を実行しています 最初の引数に。
我々はそれを返すつもりです。
しかし、この外側のリターンがあります その関数全体を返します、
その全体の無名関数 先ほど作成したもの。
その他の質問は？
すべての権利、私はかどうかを知りません あなたたちは、このための準備ができています
しかし、我々はスウィフトとでもスゴ行くことができます。
あなたは〜を用意する？
[OK]を、これは素晴らしいです。
>> 今、私たちは実際に能力を持っています スウィフトで、ためにどのようにモジュラーの
プロトコルベースの​​方法、それはすることです 私たち自身おかしく演算子を定義します。
この場合のように、私たちが持っていたなし よくexponentiation--のオペレーター、
何かの力を行うため。
しかし、私は、スイフトで、新しいを定義することができます 正確にそれを行う事業者。
したがって、この場合にあります ここで構文の束。
そして、私はあなたがそれを見てすることができます あなたがこれを見たときに、自宅で。
しかし、我々はこの中置を定義します 次に私達にできるようになり、オペレータ、**、
何のことを定義することによって、 機能**実際
左手を受け入れるために、い 側、右側、
し、その指数を返します 右側に左側。
>> そして今、突然、私のすべて 新しい分子を作成しました。
だから、2 ** 3は3乗に2を意味します。
[MIND SOUNDを吹き込む]このことにより、 それ自体は、あなたのようなことが行う必要があります
私は行くよ、OK、ネジC. スイフトのすべての方法。
これは素晴らしい。
これはかなり素晴らしいです。
>> けれども、これは良い例です。
しかし、私は一度外に決して持っていません この例の実際
私自身のオペレータを定義しました。
しかし、まだ、それが示しています スウィフトの多くの電力
これは実際には、なぜ 実際には非常にクール。
はい、OK？
聴衆：あなたがしている場合 独自の演算子を定義し、
あなたが誤っていない行う方法を知っていますか 試してみて、だオペレータを作成
C言語のどこかで、のような スウィフトのどこかに隠されました、
あなたのようなあいまいな 前に見ていない可能性があります。
>> DANアルメンダリス：だからあなたがしようとしている場合 独自の演算子を定義するには、
定義の危険性があります 既存の演算子を介して1つ。
それは詳細レベルに入ります 私たちは以上の行く時間を持っていないと思います。
しかし、それは危険です。
そして、それは非常に理由は、実際にあります 私は、キャレット記号を使用していませんでした
我々は、電源を入力しているとき、私たちは通常、 4少しキャレット5か何かを使用
そのように、ちょうど私達がいる時 仲間か何かをGchatting。
しかし、その場合、それは、実際には 衝突の原因となったであろう。
そして、私はちょうどので、それを回避しました 私は、この場合には知ることが起こりました
それは、その衝突を引き起こすこと。
>> 大丈夫。
さて、残念ながら、ため 過去7分、
私が吹いて維持する必要があります あなたの心を少し。
だから、私はあなたを表示することができます いくつかの他のものと同様。
>> 私たちはあなたのこの考えを示しました これらの匿名の機能を有します、
あなたがすることができ、これらの閉鎖 種の周りの機能を渡します。
あなたはそれらを返すことができます。
あなたはそれらを操作することができます。
あなたは狂気のもののすべての種類を行うことができます。
>> しかし、もうひとつ、その 有用であることが起こります
能力は、対照的にそのまま これらの機能を返すへ
関数内で、関数を渡します 別の関数のパラメータとして。
あなたは、地球上の理由も考えるかもしれません 私はそのような何かをしたいですか？
>> さて、私がしたいとしましょう 私は、この演算子を取ります
作成し、適用するように懸命に働きました 異なる数の束にそれ
配列インチ
したがって、この場合には、私はの配列を持っています 1、4、7、2、5、10、56 integers--。
そして、私はそれらすべてを倍増したいと思います。
その私たちが一般的にするような方法 それだけで記述することです行います
そのループのためのシンプルな それらのすべてを反復
とのいくつかの並べ替えを行います それら平方操作、
新にそれらの新しい値を入力します 変数、またはむしろ、ここに新しい配列。
との出力の値 結果は、これらの配列のすべてです、
あるいはむしろ、それらのすべて 要素は今の二乗します。
>> そして、我々は同じことを行うことができます それを3乗するためのもの、
少し警鐘 オフに行くする必要があります
多分そこだと言って いくつかの方法私​​たちは希望
この少しを簡素化することができます。
そして、実際にはそこにあります。
私たちが作成することができれば 私たちにできる機能
捕食者、関数として、受け入れるには？
したがって、この場合には、取ります これらの引数を見てください。
私たちは、ダブルスのリストを受け入れるつもりです。
そして、我々が行っています 機能を確定します
起こっているFと呼ばれる変数で ダブルを取ると、ダブルを返します。
そして、全体の出力 この関数全体の
マッパーがしようとしていると呼ばれます 二重と呼ばれる配列を返します。
>> これはその後、私ができるようになる何 やることリストを反復処理することです
そして今、同じことを行うが、 それぞれにその関数を適用します
そのリスト内の個々の値の。
だから私は本当に何であるかFかわかりません。
それは私には関係ありません。
しかし、それが二重にかかるように、 、その上にいくつかの操作を実行します
して、返します。 ダブル、私は次のようになり
全体にその機能をマッピングすることができます リスト内のすべての単一の要素。
>> プログラミングのこのタイプは 高階関数と呼ばれ、
どこに関数を渡しています 周りのパラメータとして
機能で物事をやって。
それは一種のこれらのすべてを取るようなものです 我々はCS50で学んだアイデア
ソートそれらを取ります 次のレベルへ。
そして、これはすべてのCS51スタイルのものです。
そして、私たちは徹底的に行きますよ そのようなクラスで、より。
>> しかし、これはまた、あります ここで重要な私たちのため
機能の多くを見ます スウィフトで使用されます
それは基本的にありません 我々が持っている場合は、この、
いくつかの数字、数字のいくつかの配列。
我々はそれを渡すつもりです 私たちのマッパーに配列。
そして、我々はまた、しようとしています これは、いくつかの関数を渡します
我々はすでにここに定義しました。
それは正方形になるだろう。
そして、我々はそれからになるだろう これらの数字のすべてを二乗
ここで、この結果にそれを格納します。
>> したがって、この場合、私たちは私たちを定義しました 独自の機能は、マッパーと呼ばれます。
しかし、この正確な事はあります、 実際には、スウィフトに内蔵。
の様々なものがあります マップと呼ばれる機能。
マップ機能があります、 減らす機能があります、
およびフィルタ機能があります、 基本的に関数を適用します
内のすべての単一の要素に いくつかの方法でそれらを修正するためにリストします。
>> 観客：あなたが変換されるので、それで 別の形式へのデータ
function--を通して
DANアルメンダリス：右。
うん、そう機能 我々は受け入れていること
何らかの方法でデータを変換されます。
このケースでは、のいずれかでした それを二乗、または我々はそれを3乗しました、
または実際に、我々は実行することができ まったくその上に何も操作しません。
>> しかし、私はその後、どのようにこれをお見せしましょう 実際に見に行くされています。
そして再び、私が実行しています 少しの時間。私はないんだけど
以上のすべての行くことができるようにするつもり ここでは詳細には、ソースコードの。
しかし、私はそれをすることをお勧めします。
私たちはできるだけ早くそれを投稿します この講演の後に可能。
>> しかし、あなたはこれを見て取る場合、 私たちが数のリストを持っていることを前提とし、
この中の数字の配列 変数と呼ばれる数字。
その後、我々はこれを実行したいです これらの数字のフィルタ操作。
そのようにフィルタが高くなります 次関数こと
また、配列や関数を受け入れます。
そして、その中のすべての要素に アレイは、その機能を実行します。
>> その関数を返す場合 trueの場合、そのアイテムを保持します。
その関数がfalseを返す場合、 それは、そのアイテムを捨てます。
そして、それはリストを返します それは、すべての構成されています
フィルタリングされたそれらのアイテムの。
>> そのように別の言葉では、これは 同じ考え、評定表。
私たちは、グレードの様々ながあるかもしれません この値に番号を呼ばれます。
100、70、とのことでした。 40、というようになど。
何このフィルタがないことの通知であります これはそのシンタックスシュガーであります
無名関数のため。
これは言って匿名関数であります その私が受け入れているパラメータ
それならば、になるだろう 、70以上であります
これはつまり、trueを返します その項目は、このフィルタに保持されます。
それでは、少しであるとします このことについてより具体的な。
私は、この数値の配列を持っている場合 それは、100、70、及び40から成り
私は、このフィルタを実行します それらのそれぞれの操作。
その結果、最初の100のこの値です。
100以上 70に、真であります
100に保持されていることを意味 この配列のこの新しいコピー。
70も通過します。
しかし40はしていません。
だからpassingCountに何が返されます 要素100との配列です70--
100、カンマ、70。
これらは2つだけでした 維持したアイテム。
だから理由は、私はすぐに通過しました 高次のこれらの種類の多く
これは、共通であるためのものがあります あなたはかなりスウィフトで見るもの
頻繁に、いくつかの操作を行っています この無名関数の構文を使用して。
>> いくつかのクールなものがあります。
スイッチは、スウィフトに本当に強力です 私は強力な、狂った狂ったように意味します。
あなたはスイッチを使用することができますし、 あなたは実際にそれらを適用することができます
一種の狂気である範囲に、 そのような派手なものを行います。
>> しかし、最後の数分で、 私はかなり遠くスキップしたいです
そしてあなたの方法の具体例を示します 我々はスウィフトを使ってiOSアプリで作成することができます。
だから、あなたがやっているとき これは、あなたが取る必要があるでしょう
Appleの上のルックat-- ドキュメント、彼ら
本当に良いチュートリアルがたくさんあり​​ます 最初のアプリケーションを作成するため。
そして、私は何をすることをお勧め ので、彼らはあなたを取ること
まさにまでのすべての工程を経て iOSアプリケーションを作成するためにクリックしてください。
>> しかし、ここで我々は、このiOSアプリを持っています。
そして、それは本当にかなりシンプルなアプリです。
私はこれを実行すると、私がお見せしましょう あなたはそれがどのように見えますか。
それは基本的にありませんすべてであります インターネットJSONファイルからプル
私は、サーバー上に格納されていること。
そして、そのJSONファイル 許可するイメージを定義します
私には、貫通後、順番に私の アプリ、私のWebサーバーからの画像。
>> だから私はgetN​​extImageここにあります。
それは、インターネットから画像をロードします し、画面に表示します。
>> だから、非常に簡単です。
しかし、ここでの目標は、表示することです 私たちは物事を組み合わせることができますどのように
CS50の後者の数週間から 実際のiOSアプリケーションに。
換言すれば、おそらく1 あなたがやりたいだろうもの
iOSアプリケーションを持つことであること インターネットからデータを引き出すことができます
そしてユーザーにいくつかの情報が表示されます。
それは完全にポイントです ここでは、このソースコードの。
>> だから、について語ったことがたくさんがあります 実際のiOS開発を行う方法について説明します。
狂気の構文がたくさんあり​​ます 我々は非常に、まだ見ていないこと
クラスと同じように、クラスが実際に何です。
私たちは、主に無視することができます 当分の間、それ。
>> しかし、私たちが含まれていることに気付きます この物事の様々な内
我々はすでにのように見てきたこと 特定の名前を持つ関数。
そして、我々はそれらを与えるとき 機能正しい名前
実際には、iOSのことで期待されていること これは少し不思議な感じ。
しかし、あなたが作成したとき そこiOSアプリケーション、
その特定の関数名です 携帯電話自体によって呼び出されます
アプリケーションがしようとするロードされます 実際にはプロセスを作成します
あなたのアプリケーションを実行します。
だからもう一度、私の事がたくさんあり​​ます 私たちのために、ここでごまかすする必要があります
これについて具体的に話をします。
しかし、私は多分見になることをお勧めします 他のiOSセミナーだけでなく、いくつかの
行うチュートリアルオンラインの 記述のより良い仕事
具体的な情報。
>> しかし、我々は物事のカップルを見ることができます ここにコードから興味深いものです。
if文私たちが持っていることに注意してください。
ところで、一つの重要な if文についての事
であることを囲む括弧 ブール式はオプションです。
しかし、中括弧は、オプションではありません どんなに少数または多数のコードの行
あなたは、if文を持っています。
あなたは、if文を持つことができません スウィフトで中括弧なし。
>> そして、これは、よく、一種の愚かです。
しかし、そのための歴史的な理由があります。
それは、自分自身からあなたを救うことになっています。
例えばこのように、あなたがすることはできません その周りの中括弧を排除
if文。
これらは、実際に必要とされます。
だから私はことをお勧め このを見てみましょう。
しかし、もう一つがあります 私がしたいことを構築
スウィフトについてをお見せすること 比較スイフト2.0に新しく追加されました
スウィフトの古いバージョンに、 これは以下のとおりです。
私はそれをここに置いたところを見てみましょうか？
>> したがって、この関数で呼び出さ fetchJSON、この機能
そのJSONを引っ張るための責任があります ちょうどそう起こるのURLからファイル
私のCS50のIDE上で実行されます。
私は、Apacheの開始しました そこに私のJSONファイルを入れて、
そして私は、それを引っ張ることができますよ 使用して、インターネットからのデータ
この関数とこのURL、 これは電話で提供されています。
それはによって提供さです あなたが使用するライブラリ
あなたには、いくつかのiOSアプリの開発をやっています。
>> この珍しい存在であることをここに注意してください 構文的な構築物は、ガードと呼ばれます。
そして、本当にこれはすべてであります スウィフトは、検証の方法です
いくつかのものは持っていること あなたの前に満たされて
関数の残りの部分を続行します。
だから私は使用して、持っている可能性が このオプションのタイプ、
私がして、URLを発見したかもしれません このNSURL機能を実行
およびURLにそれを保存します 定し、次にチェック
URLがそのため、ゼロであったかどうかを確認し オプションの型を返すつもりでした。
それがnilだったなら、私は希望 エラーをプリントアウトしてから戻ります。
>> しかし、その代わりに、どのようなガードができます 私たちは、その非常にものです行います
それがあることを確認してください 実際にURLケース
適切NSURLによって設定されています。
そしてそれは、その後、ある場合 このをスキップして、それ
あなたがを続行することができます URLが正しく定義されていました。
しかし、それが事実である場合に URLが正しく定義されていません、
この関数はエラーを返した場合 またはいくつかの他の予期しないもの
実際に、このガード構築物を発生します その後、出力そのエラーに私たちを可能にします
そして、すぐに戻ります。
はい？
>> 聴衆：だから、それはようなものです 後、他の場合のような？
DANアルメンダリス：それは一種のです 、yesの場合、それ以外の場合のように
このURLはその後であることを除いて この下のすべてのために定義されています。
それはそれを、このガードを通過した場合 実際にデータが入力されます
そして残りで使用可能 あなたの関数内のソースコード。
だから私は、あなたがしようとしていると思われます 同様に、このガードを見始めます。
そして、それに留意します。
>> だから、他のカップルを見て 物事、ここでこの権利は何をされ、
だと思います、だけで何に基づいて、 我々は前に話していましたか？
>> 観客：それはリストで実行すると思いますか？
>> DANアルメンダリス：だからそれは近いです。
これは、我々が定義している関数です。
そして、我々はその機能を入力しています ここで、この関数の引数として。
>> 聴衆：[聞こえない] nilでない場合。
だから、右のリストには？
>> DANアルメンダリス：エラーがnilでない場合は、 だから、私はスクロールする必要がis--。
まあ、見てみましょう、私は本当にすることはできません ここで右にスクロールします。
エラーが中である引数です この無名関数に渡されます。
これは匿名関数です。
これは名前がありません。
しかし、我々は、これらの3つを受け入れています 引数、データ、応答、およびエラーが発生しました。
そして、それはそう、voidを返すために起こっています それが何かを返すことはないだろう。
そして、これは内容であります その関数の。
そして、我々はその内部にアクセスすることができ これらの引数のそれぞれの機能。
>> だから、旋風です 言語のツアー。
しかし、私はこれを願って、 うまくいけば、あなたが取るとして
チュートリアルのいくつかを見 スウィフトとiOSの開発に特有の、
あなたがに行く場合は特に アップルの開発者向けウェブ当ページ -
彼らは本当に良いの多くを持っています チュートリアルあなたが始めるために。
しかし、話のうまくいけばちょうどこの時間 自身が与えている構文について
それを使い始めるには十分ます。
>> 私たちは、このソースのすべてを掲載します セミナーウェブサイト上のコード
できるだけ早く、またスライド あなたはすべての人のための参照を持っています。
しかし、あなたのプロジェクトで幸運。
そして、今後のためにありがとうございました。
>> [拍手]