[レビュー:クイズ1] [アリナーム、Oreoluwa Barbarinsa、ルーカスフレイタス、ロブ·ボーデン] [ハーバード大学] [これはCS50である。] [CS50.TV] [ルーカスフレイタス]はすべての人を歓迎します。これはクイズ1のレビューです。 ただ免責事項として、これは - 私は意味、私たちはカバーしようとしている できるだけ多くの材料が、それはそれを意味するものではありません 私たちは、クイズ1にもできることのすべてをカバーするつもりだ。 だから、また、講義、セクション、あなたができることはすべてを見てみてください。 クイズ1は水曜日、来週の水曜日になるだろう。 だから、勉強​​してください。それは最初のクイズのように、かなり多くの、になるだろう そのフォーマットに関しては、それはおそらくはるかに困難になるだろう。 私は50を取ったとき、少なくとも、昨年、私はそれがはるか​​に困難だと思った。 だから、多くのことを研究しています。 >>私は、データ構造をカバーするつもりだし、ハフマン符号化。 これは、多くの人々が複雑だと思うものです。 しかし、私はそれをできるだけ簡単に作ってみるつもりです。 まず第一に、私たちはあなたたちはクイズ1のために知ってほしいことである 私が提示するつもりのデータ構造の各々の概念的な説明を理解しています。 それはあなたが実際にする必要がないことを意味します クイズ1でハッシュテーブルを実装します。 私たちは、あなたが全体のハッシュテーブルを実装しない、多分私達は頑張ります あなたには、いくつかの機能を実装できるようにするには、 最も一般的な操作が、我々はあなたがすべてのものを実装することするつもりはない。 だから、あなたがそれぞれのデータ構造の背後にある概念を理解することが重要です そしてまた、あなたがC言語でコーディングすることができること、 彼らは各々のデータ構造を持っているだけで、ほとんどの一般的な操作。 また、ポインタや構造体を確認することができる それらは、これらのデータ構造内に多く現れるためである。 >>まず、リストのリンク。リンクリストは、実際には配列に非常に類似している、 しかし、リンクされたリストと配列の違い、 まず、リンクリストは、非常に柔軟なサイズを有することで、 配列には、配列のための非常に大きなサイズを選択するか持っている間、 だから、あなたがそのアレイ内のすべてのデータを格納できるようにするつもりだことを知っている または、配列の柔軟な長さにmalloc関数を使用する必要があります。 リンクされたリストでは、それだけでより多くの要素を取得するのは非常に簡単です、 リンクされたリストに複数の要素を入れたり、要素を削除する。 そして実際に、リンクされたリストがソートされたくない場合には、 あなたが一定の時間内の要素を検索し、削除することができ、 これはO(1)時間がので、それは非常に便利です。 あなただけの、いつものmallocに覚えていて、ノードを解放するために注意する必要があります そうしないというだけでは、メモリリークがあるでしょう。 だから、リンクリスト - ノードの定義は、ちょうど私達がすぐそこ持っているもののようです。 私は、int型のnを入れていますが、あなたが望む任意のデータを格納することができます。 あなたは文字列を格納したいのであれば、それは大丈夫です。 あなたは、構造体を格納する場合、それはあなたが好きな、二重大丈夫です。 私はここに例についてはint型のnを置く。 そして、あなたは、次のノードへのポインタを持っている。 したがって、基本的に、リンクされたリストは、いくつかのデータを有しており、それは次のノードを指す。 それがリンクされたリストの最後の要素の場合は、NULLを指すようになるだろう。 だから、これはリンクされたリストの一例です。 >>わかりま​​したので、今度は私がリンクされたリスト内の要素を挿入したい場合は、我々は何をすべきかを見てみましょう。 まず、関数insertはvoid型になります 私は何を返すようにしたくないので。 と私は、引数としてint型を取るつもりだ、 私は挿入するかを知りたいので。 だから私は、最初にすべきことは何ですか?まあ、私はnewnodeが上をmallocべき、 だから、最初の行です。 私はリンクされたリストに入れて新しいノードを作成しています。 だから私は何ができますか?さて、私たちは知っているリンクリストの我々の実装で クラスで、私たちは常にグローバル変数として頭を置く。 それでは、私たちにできることは頭に変更される。 私は、この新しいノードは、新しいヘッドで作ることができ、 そしてそれは、前の頭部を指すようになるだろう。 我々はそれをどのように行うことができますか?私がしなければならない最初のこと 値に新しいノードでの 'N'を変更され、 関数に渡された。 その後newnodeが次の頭になるだろう。 頭がnewnodeがされようとしている。だから、非常に簡単です。 ノードを削除するために、我々は次のようにそれを行うことができます - 我々はそれを行うことができ一つの方法は、言うことです、 さて、私は削除したい場合は、例えば、3、 私は何ができることは、直前のノードを指すようです。 3の次のノードに。 だから、僕はそのようなことをするだろう。 しかし、それをやっての問題点は何ですか? 私は、メモリリークを持っているので、私はもう数3にアクセスすることはできません。 それに伴う問題は、私は、そのノードを解放できるようにするつもりはないんだということです。 私はメモリリークと(理解できない)は私を憎むために起こっている持っているつもりです。 だからではなく、それを行うので、私はおそらく一時的なポインタを持っている必要があります。 だから私は、TEMPを置く。それは私が削除するノードを指すようになるだろう。 そして私は、次のノードを指すように、前のノードを移動することができます 私は削除するノードの。 そして最後に、私はポインタを解放することができます。 私はすぐそこに作成されたポインタを解放する必要がありますか? 私がする、という理由だけではありません - 違いは、このノードはmallocを使用して作成されたことで、 この1は単なるスタック内のNULLスイッチとして宣言されている間ので、ヒープ内にあります。 だから私はそれを解放する必要はありません。 >>オーケー。だから今度は、スタックについて話しましょう​​。 スタックは非常に簡単です。 私達はちょうど配列を使用してクラスでのスタックとキューをしました、 しかし、あなたは理解している必要があります - ちょうどに注意してください また、同様にリンクされたリストを使用してキューにスタックを行うことができます。 あなたは配列を持っているのであれば、どのようなスタックでしょうか? スタックは、最初に、大きさを持っている必要があります。 あなたは、あなたが今持っているスタックのサイズが何であるかを格納することがあります。 そしてまた、あなたは、この数値の場合、配列を持っているでしょう あなたが望むなら、それは配列にすることができます 文字列の、構造体の配列を、保存したいもの。 スタックに関する:スタックとリンクリストの違い スタック内だけスタックに入れ最後の要素へのアクセス権を持っているということです。 それが最初に出て、最後に呼ばれています。 あなたはトレーのスタックを持っているのと同じように、 あなたはスタックの一番上のトレイを置く場合、 あなたが他のトレイにアクセスできるように、最初にそのトレイを削除する必要があります。 これは、スタックと同じことだ。 私は、例えば、スタックに要素を追加したいのであれば、私は何をすべきか? それは、プッシュと呼ばれ、それはかなり簡単ですだ。 あなたがしなければならない最初のことは、スタックのサイズかどうかを確認している 以上スタックの容量に等しいではありません。 あなたはすでにフル稼働にしている場合は、何か他のものを追加することができないため。 されていない場合、その後、あなただけのスタックに要素を追加する必要があります。 そして最後に、サイズを増やします。だから、非常に簡単です。 だから、僕は数2を追加します。 そして、私は私が削除することを意味し、ポップアップしたい場合 追加された要素の値を返した最後の要素、 私がチェックする必要がまず​​最初に、スタックが空ではないということです。 それが空なら、私は何も返すことができないため。 その場合、私は-1を返しています。 そうでなければ、私はスペックのサイズを増減するつもりだ、 と数字(s.size)を返します。 なぜ私はサイズをデクリメントしてからs.sizeを返したのですか? この場合、specはサイズ4を有するので、だ と私は第四の要素を返すようにしたいですよね? しかし、第四の要素のインデックスとは何でしょうか?三。 私はサイズがないので - 3であることを行っている、私はちょうど(s.size)s.numbersを返すことができます それは3だから。だから、ただのインデックスです。 >>今キューに入れます。キューは、ほとんど同じことである。 唯一の違いは、その代わりに第5、の最後有するものである あなたが最初に出て、最初の持っている。 おそらく、あなたがコンサートに行くのを待っているのなら、 あなたが代わりにキューのスタックを持っていた場合、あなたは幸せではないでしょう。 来て最後の人であることは、コンサートを入力する最初の人になる。 あなたは、おそらく幸せではないでしょう。 キューに、で取得する最初の人にも外に出た最初​​の人物である。 そのようにキューの定義で、アレイ内のサイズを有する他に、 また、スタックの先頭にインデックスされたヘッドを持っている必要があります。 今最初の要素はそう。 エンキューは、スタックのプッシュと同じものです。 あなたは非常にナイーブだったら、あなただけだと思います、 私がプッシュするために行ったようによく、私はちょうど全く同じことを行うことができます。 それが容量を超えない場合、私はちょうどチェックすることができます。 もしそうであれば、私はそうでなければ私はちょうど新しい値をエクスポートすることができ、falseを返す して、サイ​​ズを増やします。 しかし、なぜこれが問題なのでしょうか? のは、この例を見てみましょう。 私は原料の束をエンキューしようとしている、 そして私は、デキューおよびエンキューするつもりです。 そこのコマンドの多くはだが、それは非常に簡単です。 私は、5をキューので、5を追加しようとしています7 1、4、6、その後、私は何かをデキューしたい、 これは私が最初の要素を削除するつもりだということです。 だから私は右、番号3を削除するつもりだ? 最初の要素。大丈夫。 私は何か他のものをエンキューしようとすると、今、何が起こるだろう? 私の実装によれば、 私は、インデックスq.sizeの次の番号を入れるつもりだった。 この場合、サイズは8であり、 そのインデックス8は最後の位置に右ここになります。 私はここに1をキューしようとすると、私は最後の位置を上書きすることになる 完全に間違っている番号1に。 私は何をしたいのは、ラップアラウンドし、最初の位置に移動しますです。 多分あなただけでなく、私は確認しなければならない、と言うでしょう 私は実際にそこに何かを置くことができます。 そうでなければ、私は言って、ああ、新しいフル稼働 実際の容量は - 1、あなたはそこに要素を配置することはできません。 しかし、問題は何ですか?問題は、私はちょうどここですべてをデキューした場合 そして、私は何か他のものを追加しようと、それだけだと思います、 さて、あなたは0でフル稼働、にあった。 だからあなたのキューがなくなっています。 あなたの周りにラップする必要があり、ラップアラウンドのやり方 先見の明や他のpsetで学んだ皆さんはMOD使用していた。 あなたはq.size + q.headをするだろう理由を理解するために自宅でそれを試すことができます MODの容量が、あなたはここをチェックした場合、 我々はそれが機能することを確認することができます。 だから、最後の例では、q.sizeは8であった それはここに、配列のこの位置だったので、頭が1であった。 だから、8 + 1、9になります。 MOD容量9は0になります。 これは、インデックス0に行くだろう。私たちは、正しい位置になるでしょう。 して、自宅でキューをしてみてください。 いくつかの重要な事柄:スタックとキューの違いを理解してみてください。 自宅で、エンキュー、デキュー、pushとpopの実装に精通して取得しようとする。 あなたがそれらのそれぞれを使用する際にも理解しています。 >>それでは、ポケモンの束と10秒間リラックスしましょう​​。 そして今度は、バックデータ構造に行きましょう。 ハッシュテーブル。多くの人々は、ハッシュテーブルを怖がっていた。 問題6セットに、スペルチェッカー。 ハッシュテーブルと試みは、多くの人々は彼らの不安になる。 彼らは、彼らが理解することがとても難しいだと思う。うん? [ロブ·ボーデン]問題は5に設定してください。 >>問題うん、5を設定してください。おかげでロブ。 うん。シックスハフN 'パフ、そうだった。 問題は、スペルチェッカーで、あなたがハッシュテーブルやTRYのいずれかを使用していた5に設定します。 多くの人々は、彼らが理解し超硬と思っていたが、実際には非常に単純だ。 基本的には、ハッシュテーブルとは?ハッシュテーブルは、リンクされたリストの配列である。 アレイ、ハッシュテーブルとの間の唯一の違い ハッシュテーブルにして、ハッシュ関数と呼ばれるものを持っているということです。 ハッシュ関数とは何ですか? あなたたちはここで読むことができるかどうかは知りません。 これは、ハッシュテーブルの一例である。 だから、あなたが31の要素を持つ配列を持っていることがわかります。 そして私たちはハッシュテーブルにやっていることは、ハッシュ関数を持っている それは、インデックスのキーは、それぞれのint型に変換しようとしている。 もし、例えば、私はBのハリソンのために選択する場合は、 私はハッシュ関数でBにハリソンを置く、 ハッシュ関数は、24を返します。 だから私は、私が24でBにハリソンを格納したいことを知っている。 だから、それはちょうど配列を有し、ハッシュテーブルを持つとの違いです。 ハッシュテーブルでは、あなたを教えしようとしている機能があるでしょう 保存したいデータを格納する場所。 ハッシュ関数については、ハッシュ関数を探したい つまり、決定論的、よく分布している。 あなたがここに見ることができるように、私は店に思ったデータの多くは、実際に19であったことを参照してください。 代わりに、すべての自由だった31と30と29を使用する。 だから、私が使用したハッシュ関数は非常によく配布されませんでした。 我々は、よく分散型と言うとき、それは我々がしたいことを意味し、 およそ、の各々について、少なくとも1又は2 - アレイ内のインデックスの各々について1又は2の差、などが挙げられる。 あなたは、およそ、配列内の各リンクリスト内の要素数が同じであるしたいと思います。 そしてそれは、ハッシュテーブル内の有効なのかどうかを確認するのは簡単です、ハッシュテーブルとして表示します。 >>すると木。これは木です。 コンピュータサイエンスの木は何らかの理由で逆さまである。 だから、ここであなたは、ツリーのルート、次に葉を持っています。 あなただけの両親と子供のための命名法を知っている必要があります。 各ノードには、親の下にあるノードでその子を持っています。 したがって、たとえば、図2に示すように、右が3のためにと他の子の親であることを行っている 3は、1の親とがある他の子供であることを行っている間。 そして1は、というように3の子になるだろう、とされている。 我々は、はるかに興味深いもの、二分探索木と呼ばれるがあります その内のノードの右側にあるすべての値 右ここでは、右側にあることを行っている - の右側に、 ルートの要素よりも大きくなるだろうしている。 右のだから私はここ数5を持っている場合、すべての要素 5以上になるだろう、とされている左側の すべての要素が5未満であることを行っている。 なぜこれが役立ちましたか? まあ、私は数7はここにあるかどうかを確認したい場合は、例えば、 私は最初の5に行くと私は見に行くよ、5より7大きいか小さい? それは大きなだので、私はそれがツリーの右側になるように持っているつもりだ知っている。 だから私は見てはるかに少ないものを持っている。 二分探索木の実装では、ノードが、私はデータを持っているつもりだけど、 そうINT nが、あなたはまた、文字列を持つことができ またはあなたが望む何でも。 あなただけの小さいものを、大きいものを定義する上で注意する必要があります。 ですから、文字列があった場合、たとえば、あなたが定義することができます 右のすべてのものは、より大きな長さを持っているとしていることを、 左が下の長さを持っているとしているので、それはあなた次第です、本当に。 >>どのようにすれば、BSTを見つけるに実装することができますか? ルートがNULLの場合、我々がしなければならないだろう最初のことはチェックです。 それがNULLなら、それは物がないことを意味します あなたも木を持っていないので、右か? だから私はfalseを返します。 そうでなければ、私は番号が大きいかどうかを確認するつもりだ ルートの値より。 私は右側の要素を見つけようとするつもりだ 木の。 あなたは、私がここに再帰を使用していることがわかります。 それはあまりだ場合には、その後、私は左を見て行きます。 そして最後に、そうでなければ、それは大きな少ないかではない場合、 それは値自体だということです。 だから、僕はtrueを返します。 あなたがもし、もし、あれば私が使用していることをここに見ることができます。 と覚えて、クイズ0で、我々はもし、あれば、あれば持っていた問題を抱えていた、 あなたは、非効率性を見つけることになっていた、 と非効率は、次の場合に使用したということでした。 もしそうでなければ、もし、それ以外他に、場合は、使用している必要があります。 ifとelse ifとelseここだから、私は他に使うべきでしょうか? ない人 - うん? [学生に言えば、聞こえない] それは最高だ。そこで彼女は、それは問題ではないことを言っている 我々の前に持っていたという理由だけで非効率 いくつかの条件が満たされたかもしれない場合には、そのためだった、 だから、アクションを実行しましたが、その後、他のすべての条件を確認するつもりだった。 しかし、この場合には、すぐに返されたので、それは問題ではありません。 だからかどう他に使用する必要はありません。 >>そして最後に、の試みについて話しましょう​​、 そのみんなのお気に入りです。 TRYは、配列のツリーです。 これは、値を参照するために非常に高速だが、それは大量のメモリを使用しています。 そして、それは言葉をフィルタリングするために、通常なので、ときに お使いの携帯電話内の電話帳のように、例えば、私は知りませんが、実装したい あなたは、Bを入力できるようにしたい ちょうどBを持っている人の名前を持っている それは、例えば、トライを使用していることを実現するのは非常に簡単です。 どのようにしてみるのノードを定義するのですか? あなただけのis_wordされようとしているBOOLを持っている必要があります。 つまり、そのノードの前にすべての文字を使用していることを表し、 あなたは単語を形成することができました、 そしてその後は、ノードへのポインタの配列があるでしょう。 あなたは私たちが親ノードの配列なので、ノード*配列を持っていることを見ることができますか?うん? それでは、それが動作する方法を見てみましょう。スペルチェックのために、 我々は、27素子のアレイを有し、 我々はすべての文字に加えてアポストロフィを持っているので。 ここで前に私はちょうど私がボードに書き込むことができるようにしたいので、2を使用するつもりです。 大丈夫。だから、これは試してみるの例です。 私は最初のノードを定義した場合、私は2要素の配列があるでしょう つまり、NULLに2のポインタであるので、私はちょうど 'と' b 'を追加。 そして、私はis_word言うBOOLを持っているつもりです。 これは、最初の1のために偽になるだろう、 ただ、そのため前に任意の文字を持っていない。 だから、空の言葉は言葉ではない。だから、偽です。 私はこの辞書に「A」を追加したい場合、私は何をしなければならないでしょう? 私は 'A'のための新しいノードををmallocしなければならない、 した後、trueに単語を追加する。 だから、それだけで持つこと」「本当であることを行っていることを表している。理にかなって? 私は「BA」を追加したい場合は、その後、私は 'B'のためのmalloc 1する必要があります、 そして私は、falseにブールを設定するつもりだ 単独では「B」は言葉ではないので。 それから私は別の 'A'の1ので、「BA」ををmallocするつもりだ、 そして、私はそれが本当のWordのセットアップするつもりです。 「BA」は言葉であるため。 私が見たい場合は、次に「B」は、この辞書にある場合 私は最初に1、 'B'に行くことができます。私がダウンして、私は見て言葉であり、それは誤ったと言います。 だから、言葉ではありません。私は、「BA」をチェックしたい場合は、 私は最初の1、「B」に移動し、「A」に行き、私は真の参照なので、言葉である。理にかなって? 多くの人々が試みることで混乱する。なし? >>最後に、ハフマン符号化。ハフマン符号化は、非常に便利です メモリを保存し、テキストフ​​ァイルを圧縮するには、 という理由だけであなたは、たとえば、 'a'と 'E'を使用し多くの時間、 あなたたちは同じくらい 'Q'または 'Z'を使用している場合、あなたの文書に、私は知らない。 一つ一つの文字に対してだけで1バイトを持つことは、 ひとつひとつの - 私たちはASCIIテーブルを持っている256の文字は非常に最適ではない、 あなたがはるかに使用するいくつかの文字があるという理由だけで、 だから、おそらくそれらのために、より少ないメモリを使用する必要があります。 私は、ハフマン符号化をどのように使うのですか? 私たちは、ハフマン木をしなければならない。  ハフマンツリーはノードを持つ 手紙、 'C'、 'B'、 'A'、のようなことを行っているシンボルを持っている、 あなたが持っているどのような文字、単語がテキストで表示された周波数であり、周波数、 あなたがハフマンツリーを作成していたこと、 した後、ハ​​フマン木の左を指すように起こっているノード と右を指すように起こっている別のノード。だから木が好きです。 どのようにしてハフマンツリーを構築しますか? あなたが最も低い周波数を持つ2つのノードを選択するつもりだ。 あなたはネクタイを持っている場合は、2つのノードを選択するつもりだ 同様に、最も低いASCII値を持っている。 次に、これらの2つのノードから新しいツリーを作成しましょう それは、親ノードに組み合わさ周波数を持っているとしている。 そして、あなたは森から2子を削除しようとしている 親に置き換えます。 そして、あなたはあなただけの森の中で1木になるまでそれを繰り返すつもりだ。 それでは、あなたがZAMYLA用ハフマン木をするだろう方法を見てみましょう。 あなたはすべての文字が「A」を除いて、周波数1を持っていることをここに見ることができます。周波数2を有している。 だから私は、私はASCII値と周波数の順に入れてすべての文字のためのノードを作成しました。 私が最初にツリーを作成したいのであれば、それは「L」と「M」とされます。 だから、ここにある。ペアの頻度は2になります それは+1 1だから、それから、最も低い周波数を持つ次の2は「Y」と「Z」である。 2の周波数を持っている - そして私はそれらのすべてがされています。 ので、次の1のための最低のASCII値を持つものは、どれですか? 'A'と 'L'。だから私は、新しいノードを作成し、 そして最後に、4と2なので、2は左側にあることを行っている。 そして、これはハフマン木である。 それから私はいくつかのテキストを書きたい場合には、 のようなハフマン木を使用して、テキストに変換するためのバイナリには非常に簡単です。 私は左に移動すると、0と右に移動していることを言う場合は、1である 行くが表現することは何ですか? だから、右なので右、1、1のような 次いでそのように左0は、Lになり、次いで1,0,0。 だから1、0、これだけ1、0、 'A'。 して、0、1、その「Z」。 して、1、0、0 - いいえ。 0、0、怠け者「Y」になります。 だから、私にとってすべてです、ロブのは引き継ぐつもり。 [ロブ·ボーデン]だから、週7のもの。 我々は本当に速いの上に行くためにたくさん持っている。 ビット演算子、バッファオーバーフロー、 CS50ライブラリ、そしてHTML、HTTP、CSS。 全部で15〜20分のような。 ビット演算子。あなたが知る必要があると彼らの6があります。 ビット単位AND、ビット単位のOR、XOR、左シフト、右シフトではなく、。 右シフトしていないあなたがほとんどすべてでの講演で見た。 我々はすぐにここで上に行くだろうが、それはこれらが存在する6であることを知って良いことだ。 ビット演算子を使用すると、+ 4 3を行うときのようなものであることを忘れないでください。 あなたは3および4のバイナリを扱っていません。 ビット演算子を使用すると、実際に数字3と4の個々のビットを扱っている。 >>だから我々は言うでしょう最初の1は、ビット単位ではない、 そしてそれがない、すべてはすべてのビットを反転です。 あなたがC言語でこれを書いているのであれば、ここで、あなたはそれを書かないだろう 〜11011または任意として、あなたは、〜4のように記述します そして、それは4のバイナリ表現を反転あろう。 だからここに、いくつかの〜進数1101101のは、正確に1の0のへのすべての1とすべて0を反転しようとしている。 私はそこに言ったように、これを頻繁に使用、 そして我々は我々はいくつかの数を思い付くしたいようなもので、少しでそれを見ることができます ビットのすべては、それらの一つを除いて、1どこ。 だから、数を表現するために、通常は簡単です ちょうどその単一のビットがセットされる場合には、 して、そのように他のすべてのビットはその1を除いて設定されていることの〜を取る。 だから、我々は少しで多くを使用するつもりだものだ。 >>ビットごとのOR。ここでは2進数、およびこれらの2つの数値がある 彼らはすべての可能を表すことから、かなり代表的なものである ビットの組み合わせは、あなたが上で動作する必要がある可能性があります。 私は各ビットを論理和するときここで、我々だけでまっすぐに比較しようとしている。 だから、左側に私たちは、1と1を持っている。 私はビット単位のときは|ものを、私は何を取得するつもりですか?一つ。 その後、ビット単位| 0と1は私を与えるために起こっている?一つ。 ビット単位の1と0は同じもの、1になるだろう。 ビット単位0 | 0は私0を与えるために起こっている。 0ケース|だから私は0を得る唯一のケースは0である。 そしてあなたは自分の論理和をとり、そのようなものと考えることができます。 あなたは、真1、偽0と考えるのであれば、同じことがここでも適用される。 だから、真または真真であり、trueまたはfalseはtrueです。 falseまたはtrueはtrueです。虚偽または虚偽のは、実際に偽の唯一のものです。 ここであなたが知っておくべき例です ビット演算子を使用した場合のかなり良い例として。 ここまたはOX20との資本 'A'の場合、 そして我々は我々が何かを得る、第二に、これらを見てみましょう。 我々または小文字の 'OX20であれば、我々は何かを得る。 それでは、ASCIIテーブルを引き上げてみましょう。 大丈夫。ここでは「A」であることがわかります - ここでは、「A 'は65進数である必要があります。 しかし、私はOx41で16進数、一緒に行くよ。 かなり確信して、私たちは、クラスでそれを見た。私たちはクラスでそれを見たと思う それは、16進数のバイナリに変換するために非常に簡単だということ。 だからここに、私はバイナリに4を入れたい場合には、 それはちょうど0100になるだろう。 これは1の位、2の位、4の場所であるので、これは4である。 それから私は0001であることを行っているバイナリの中に1を分割することができます。 そしてこれは、バイナリ内の「A」の表現になるだろう。 小文字の ''、それが今Ox61になるだろうと考えると、 そのバイナリに、これらを分割する場合、、その6 - それでは、実際にそれをやってみましょう - ん、消しゴムがないのはなぜですか。消しゴム。 Ox61。だから、バイナリに6を分割する+ 4 + 2 + 0 0になるだろう。 そして分割1は0001になるだろう。 これら2との違いを見てみると、 私たちは、小文字と大文字の 'A'の間の唯一の違いは、この単一のビットであることがわかります。 だから、ここに戻ってくるまで - 大丈夫。 我々は少しOX20が何であるかを見れば、ここに戻ってくると、 そう、そのバイナリにOX20を分割、 0010、0000である。 OX20、設定されている唯一のビットは、我々はと懸念している、このビットである 資本と小文字の間で ''を切り替えると。 私か、この1である「A」、「A」であれば、 もしIまたはOX20と「A」、 私は何を取得するつもりですか? [学生、聞こえない] >>小文字の「A」、それは、このビットを1に反転するために起こっているからです。 そしてもし私か '' OX20で、私は何を取得するつもりですか? 単に '' OX20と論理和をとるため、小文字 私はちょうど1に、この単一のビット論理和をとることするつもりだ、それは問題ではありませんので、それは、すでに1です。 だから我々は、 'a'と 'A'を得る。 >>ビット単位のAND。再び、我々は我々の論理と相手と考えることができます。 左側には、我々は真&真持っています。 それが本当であることを行って、例のすべてについてですが、 偽&trueまたは真·偽、またはfalse&偽 それらのものがいずれも該当しない。 それでは、私たちが得てしまうことは1000年である。 だから今、ここで、ここで私は信頼できる、ビット単位のいない使用しましたところですが、 私たちは、OX20を持っていたところ。 だから、これはOX20です。 今、私が何をしたいのか、ビット単位のOX20の〜。 それはすべてのビットを反転しようとしている。 だから私は、1101年、1111年を持っている。 だから〜OX20とAND 'A'は私に何を与えるために起こっている? 私たちは本当に考える必要がある唯一のビットは、この1である、 以来、これらのビットのすべてが1に設定されている場合、 その後、我々は、 'A'があった正確に何を取得するつもりだ を除いて、おそらく、このビットはどのようである。 それが1だった場合は、ここでは0に設定される予定なので、 これが何であれ、これが0になるだろうとANDので。 だから、「A」は〜OX20は私を与えるつもり&何ですか? [学生が答える、聞こえない] >>そして、「A」とはどのようなものである - それは「A」です。 と ''&〜OX20は私を与えるつもりは何ですか? 'A.'これは、現在1であるため。 この0との論理積は、それを0にするとしている そして今、我々は「A」を取得するつもりだ。 >>どちらも '、A'であり、この種の最後になりましたが、 我々は、排他的論理和を持っている。それは非常に多くのようなものだか、 それは排他的手段または除いて。 これは、通常、または現実世界で考えるもののようです。 だから、どちらか 'X'または 'Y'ではなく、両方を行う。 ここで1 ^ 1は0になるだろう。 真のためである - それは論理的真と偽と同様に動作しません 、ビット単位&およびまたはそうであるように しかし、本当の^真はfalseです。 我々は唯一のいずれか一方のみが真の場合にtrueを返すようにしたいので。 だから、1 ^ 1は0である。何^ 1 0はどうでしょうか? 1です。 1 ^ 0 ^ 0 0は0、1である。 だから、すべての状況下で、0ビット単位のもの0は0になるだろう。 1ビットごとに何か0または0ビット単位の1、 それはだた場合|または^、それは1になるでしょうし、それは&だ場合、それは0になるでしょう。 そして1ビット単位の1が1でない場合だけは、排他的論理和である。 それは0110です。 だからここに今、排他的論理和を使用して - 私たちは戻って20にいる。 '' ^ OX20は、我々が比較しているこれらの2ビットである。 だから、1 ^ 0は私に何を与えるために起こっている? 1。 '' ^ OX20は私を与えるために起こっている?小文字。 '' ^ OX20は私を与えるために起こっている?資本A. これはやっているものは何でも、OX20、このXOR演算 効果的にこのビットが何であれフリッピングされる。 これが0であれば、それは今1になるために起こっている。 これが1であるため、^ 1は0である。 だから私たちの ''は 'A'となっている、と私たちの 'A'は ''となっています。 だから、XORは念をひっくり返すのは本当に便利です。 あなただけの文字列を反復処理したい そして一つ一つの文字の大文字と小文字を交互に、 OX20とあなただけのXORすべて。 >>今、私たちはシフトを残している。左シフトはただ、基本的には、しようとしている へ、あるいは左に数字のすべてをプッシュすると、その背後に0を挿入します。 そこでここでは、00001101を持っています。 我々は、右から3 0年代をプッシュするつもりだ そして我々は01101000を得る。 バイナリ以外の面では、 我々は、本当に13左シフト3で、私たちに104を与え扱うだことがわかります。 だから、左シフトは、我々はここを参照してください、X << yは基本的には、X * 2 ^ yです。 * 2 13 ^ 3 ^ 3 2が13 * 8が104で、8です。 あなただけの一般的な、どのように各桁内のバイナリを考えた場合、 我々は右から起動する場合は、1の位は、2のところ、それから4の場所です。 だから、右から0年代に押すことにより、 私達はちょうど、8の場所に4の観戦したものをプッシュしている そして16の場所に8の観戦したもの。 各シフトはわずか2で乗算します。うん? あなたは5分シフトした場合、[学生]はどうなりますか? [ボーデン]あなたは5だけシフトした場合、あなただけの数字を失うことになる。 必然的に、それは同じことだ。同様に、整数は32ビットであり、 あなたは2本当に大きな整数を追加した場合ので、それだけで、整数に収まらない。 だから、ここでは同じことだ。あなたは5分シフトした場合、 我々はちょうどその1を失うことになる。 そして、それは "ほぼ"私は何を意味のようなものだ あなたはあまりにも遠くにシフトした場合には、ビットを失うところ。 >>右シフトは逆になるだろう、 我々は、末尾から0を突き出すつもりだどこ そして我々の目的のために、左から0年代に記入してください。 だから、これをやって、我々は基本的に我々はすでに行っていたものを反転している。 そして、我々は、右の3 0ちょうど落ちていることがわかります 私たちは右に1101のすべての方法をプッシュしている。 これは、事実上、X / 2 ^ yは104 3をやっている。 だから今、ここでは、同じような考えです。 なぜそれだけでおおよそのx / 2 ^ Yではなく、実際にはX / 2 ^ Y? 私は4だけずれていた場合、私は1を失っているからである。 基本的に、どのようなあなたが考えるには、単に一般的に整数の除算を考える。 だから、5月2日のような2です。それは2.5ではありません。 ここは同じ考えです。私たちは、2で割る場合には、 私たちは道に沿って奇数ビットを失う可能性があります。 だから今 - それは、ビット単位のためにそれだ。それはあなたが知る必要があるすべてです。 我々は、クラスで見たユースケースを覚えて、 ビットマスクのようなビット演算子のために有用であり、 または、ビットマスクのためにそれらを使用しています。 大文字と小文字、変換はかなり典型的な例である。 >>わかりま​​したので、バッファオーバーフロー攻撃。 誰もがこの機能に間違っていたものを覚えていますか? 、我々は12バイトで、12文字の配列を宣言し注目してください そして、我々は12文字列全体バーの我々のバッファにコピーします。 だから、ここでの問題は何ですか? なぜ12 - マジックナンバー12はかなりすぐにように飛び出す必要がありますか? バーは12文字以上であることを起こるとしたらどう? 何バーは、文字の何百万人であるかの? ここでの問題は、memcpyをです。バーが十分に長い場合、 それだけで完全になります - 'C'、 'c'は、それが唯一の12文字だったことを気にしない。 'c'は、それが多くのバイトを収めることができないことを気にしません。 それだけで完全に文字が上書きされ、我々はそれのために割り当てられてきた12バイト、 そして、実際にそのバッファに属していないメモリに過去のすべてのもの どのような文字列バーがあると。 だから、これは私たちが授業で見た絵だった 我々は我々のスタックを育った場所。 あなたはこれらの写真を使用したり、再び慣れる必要があります。 我々は、スタックが育っている、メモリアドレスは、上部に0から始まります と下部に40億を好きにダウンして成長する。 私たちは、どこかにメモリ内の私達の配列 'c'を持っている その後、我々は右のそれの下に棒に私たちのポインタを持っている、 そして、我々は、この私たちのリターンアドレスと私たちの親ルーチンのスタック内のフレームポインタを保存している。 リターンアドレスが何であるかを覚えていますか? 主な機能バーを呼び出し、関数fooを呼び出したときに、それは、だ 必然的に、返品バー。 そうするときバーが戻ると、彼らはそれが戻ってそれを呼ばfooのために起こっていることを知っておく必要があります。 だから、リターンアドレスは、関数が戻るときに返さなければならない関数のアドレスです。 バッファオーバーフロー攻撃のために重要なの理由は、都合からである、 ハッカーはそのリターンアドレスを変更したい。 代わりに戻っfooへ行くの、私は戻って、ハッカーが私に戻って行きたいところへ行くつもりです。 そして、便利なことに、ハッカーは頻繁に戻って行きたいところ 我々は元々持っていたバッファの先頭です。 だから、もう一度、リトルインドに注目してください。 アプライアンスは、リトルインディアンシステムの一例である、 その整数またはポインタが逆にバイトで保存されます。 だからここに私達が見る - これは何ですか?うん。 私たちは、Ox80、OxC0、OX35、OxO8を参照してください。 桁の16進数を覚えていますか? 我々は、リトルインドにおける桁の16進数を逆にしないでください 2進数の桁が1バイトを構成している、と私たちはバイトを逆からです。 我々は80530CO8、同じように、保管しない理由です。 我々は右から、その代わりに、2桁の各ペアを格納します。 そのアドレスは、先頭のアドレスを参照 我々は、実際に最初の場所でにコピーしたかった私たちのバッファの。 便利だ理由は、どのような場合、攻撃される だけではなくだった文字列を持つのに起こった 等を無害な文字列、自分の名前か何か、 どのような場合は、代わりに、その文字列はいくつかの任意のコードだった それは彼らがそれをやってみたかった何でしたか? そこで、彼らは可能性が - 私はすべてのクールなコードを考えることはできません。 これは、しかし、何でもかまいません。どんな悲惨なコード。 彼らが望んした場合、彼らはSEG故障で何かを行うことができますが、それは無意味になります。 彼らは通常、あなたのシステムをハックするためにそれをやる。 >>オーケー。 CS50ライブラリ。 これは、基本的には、のgetInt、getStringを、私たちはあなたのため提供されるすべてのこれらの関数である。 だから我々は、char *文字列があり、それは我々が吹き飛ばした抽象化だ 学期中のある時点で。 文字列は文字の配列だけであることに注意してください。 そこでここでは、getStringをの簡略版を参照してください。 あなたはそれを実際に実装している方法を覚えておくことを振り返る必要があります。 キーの詳細は、我々は、一度に単一の文字を取っ気づく ちょうど私達がキーボードでタイプするようなもので、これで標準から。 だから、一度に単一の文字、そして我々はあまりにも多くの文字を取得する場合、 そう+ nは1容量よりも大きい場合には、 その後、我々は我々のバッファの容量を増やす必要があります。 そこでここでは、我々のバッファのサイズを倍にしている。 そして、それはいっている、我々は我々のバッファに文字を挿入 私たちは、新しい行またはファイルまたは何の終わりを受信するまで、 その場合には、我々は、文字列、次に実際のgetStringをして終了です 我々はあまりにも多くのメモリを割り当てた場合、それは戻って少し縮みますように、メモリを縮小します。 だから我々はそれを示していないが、主なアイデアはある 一度に単一の文字を読み込むことがあります。 それだけで一度に全部で読むことができない、 そのバッファは、特定のサイズであるためです。 それがバッファに挿入しようとした文字列が大きすぎるのであれば、それはオーバーフローする。 そこでここでは、単一の文字を読み込んでいることを防ぐ 当時、我々がする必要があるときはいつでも成長しています。 そうのgetIntや他CS50ライブラリ関数は、getStringをを使用する傾向がある その実装では。 だから私はここで重要なことを強調した。 これは、文字列を取得するためには、getStringを呼び出します。 のgetStringは、メモリを返すことができなかった場合は、 のgetStringのmalloc何かで登録して、呼び出されるたびにgetStringことを覚えておいてください あなたは(理解できない)あなたが得たその文字列を解放しないでください。 それが何かをのmallocに失敗したのであれば、ここで、我々は、単にフラグとしてINT_MAXを返す ねえ、私たちは実際には整数を取得することができませんでした。 あなたは私があなたに戻って何でも無視すべきである、または あなたは有効な入力として扱うべきではありません。 最終的に、それが成功しなかったと仮定すると、我々は、特別なフラグを指定してsscanf関数を使う つまり、最初の整数と一致し、 その整数の後に任意の文字に一致する。 だから我々はそれが1と等しくなるようにしたい気づく。 だから、sscanfは戻りは正常にどのように多くの試合をした場合はどうなりますか? それが成功して整数にマッチした場合は1が返され、 それは、整数と一致しなかった場合は0を返し、それは2を返します それが一致した場合には、整数は、いくつかの文字が続く。 だから我々は1以外のものと一致した場合、我々は再試行気づく。 私たちが入力した場合は1、2、3、C、または1、2、3、X、 それから1、2、3の整数に格納さになるだろう、 Xは、文字で保存になるだろう 我々は唯一の整数をしたいので、sscanf関数は2を返します、そして我々は再試行になります。 >>すばやく、HTML、HTTP、CSSを吹く。 ハイパーテキストマークアップ言語は、ウェブの構造と意味です。 ここでは、HTMLタグを持って講義からの例です。 我々は、ヘッドタグ、bodyタグを有する 我々は、我々が実際に開始と終了タグを持たない空のタグの例を持っている 我々だけで、リンクや画像を持っている。 全く閉じイメージタグはありません。タグが行う必要があるすべてのものを達成するだけで、単一のタグがあります。 リンクは例であり、我々はあなたがCSSにリンクする方法を見ていき、 スクリプトは、外部のJavaScriptにリンクする方法の例です。 それは非常に簡単だし、HTMLはプログラミング言語ではありませんが、覚えています。 ここでは、これがどうなるのか、フォームを定義するか、少なくともだろうか覚えている? このような形態は、アクションとメソッドがあります。 あなただけの今まで表示されます方法は、GETとPOSTです。 そうなものをURLに入れれますバージョンです取得します。 それは、URLに置かれていない場合、POSTはある。 代わりに、フォームからのデータは、HTTP要求に、より隠された挿入されている。 HTTPリクエストがどこに行くので、ここで、アクションが定義されています。 それが起こっている場所は、google.com /検索です。 方法。 GETとPOSTの違いを覚えて、 ブックマークの何かにしたい場合や、単に、例として言う。 あなたは、POSTのURLをブックマークすることができなくなります データはURLに含まれていないため。 HTTPは、今、ハイパーテキスト転送プロトコルである。 あなたはそれが転送するのに期待するハイパーテキスト転送プロトコル、 ハイパーテキストマークアップ言語、それはない。 それはまた、あなたがWeb上で見つけた画像を転送し、 あなたが作る任意のダウンロードは、HTTPリクエストとして開始します。 だから、HTTPはWorld Wide Webの言語だけです。 そしてここでは、HTTPリクエストのこの種を認識する必要があります。 ここ側のHTTP/1.1はちょうどそのバージョンだと言う 私が使用しているプロトコルの。 これはかなり、常にあなたがそれを見ることができますように、HTTP/1.1になるだろう。 その後、我々は、これはあなたが見るかもしれないと、GET、POSTされて代替したことがわかります。 そして、私が訪問しようとしていたURLがwww.google.com/search?q =何とか、何とか、何とかだった。 だから覚えて、この、疑問符Q =何とか何とか何とか、 フォームから送信されるものの一種である。 それは私に返される可能性があります応答は次のようになり。 ここでも、そのことを行っているプロトコルで始まる ステータスコードが続く。ここでは、200 OKです。 そして最後に、私が実際に求めたウェブページが続きます。 可能なステータスコードは次のように表示されます、あなたはそれらのいくつかを知っている必要があります。 200 OKあなたはおそらく前に見てきました。 403禁止、404見つかりません、500内部サーバーエラー あなたがウェブサイトにアクセスして、何かが壊れているか、彼らのPHPコードがクラッシュした場合、通常、 アプライアンスで、我々はその大きなオレンジ色のボックスを持っているのに対し、 それがアップするなどで、何かが間違っている、と言い、このコードは動作しません またはこの関数の悪い。 通常のウェブサイトでは、あなたは関数が実際に悪いかを知る必要はありません だからではなく、彼らはあなたに500内部サーバーエラーを与えるでしょう。 TCP / IPは、HTTP下で1層である。 インターネットはワールド·ワイド·ウェブの外に存在することを忘れないでください。 好きな人は、HTTPを経由しないオンラインゲームをプレイする場合には、 それは違うを通じて起こっている - それはまだ、インターネットを使っている、 それは、HTTPを使用しません。 HTTPはTCP / IPプロトコル上に構築されたのほんの一例である。 IPは、文字通り、インターネットプロトコルを意味します。 すべてのコンピュータはIPアドレスを持って、彼らはそれらの4桁のものです 192.168.2.1のような、または何でも、それは地元の1になる傾向がある。 しかし、それは、IPアドレスのパターンです。 そう、DNS、ドメインネームサービス、 つまり、実際のIPアドレスにgoogle.comのようなものを翻訳ものだ。 ですから、URLにそのIPアドレスを入力すると、 それは、Googleにあなたをもたらすだろうが、あなたはそれらの事を覚えていない傾向がある。 代わりに、google.comを覚えがちである。 我々が持っている最後のことは、これはIPアドレスのTCPの一部であるポートです。 TCPは、より多くを行います。あなたのWeb​​ブラウザを実行している、のように、考えてみてください。 たぶん、あなたは、いくつかの電子メールアプリケーションを実行している。 多分あなたは、インターネットの実行を使用して他のプログラムを持っている。 彼らはすべてのインターネットにアクセスする必要があり、 しかし、あなたのコンピュータは1 WiFiカードまたは何を持っています。 だからポートは、我々は分割することができるしている方法です どのようにこれらのアプリケーションは、インターネットを使用することができます。 各アプリケーションは、それが聴くことができます1特定のポートを取得します と、デフォルトでは、HTTPはポート80を使用しています。 一部の電子メールサービスでは、25を使用しています。 小さい番号のものは予約される傾向にある。 通常は、自分のために高い番号のものを得ることができます。 CSS、カスケーディングスタイルシート。 我々のCSSとHTML形式ではなく、との様式のウェブページ。 あなたのCSSを置くことができる3の場所があります。 それはスタイルのタグの間、または完全に別のファイルにしてからインチリンク、インラインすることができます そして、ここで、CSSのほんの一例です。 あなたはこのパターンを認識する必要があり、 ここで最初の例は、私たちは、bodyタグに一致しているが、 そしてここでは、bodyタグを中心としている。 第二の例は、事を一致している IDのフッターに、我々はそれにいくつかのスタイルを適用しています。 左にそのIDのフッターテキスト整列に注意してください 本文テキスト、整列センターのに対し。 フッターは体内にある。 それは、体がテキスト整列センターを言っていても、左ではなく、テキストを整列します。 これは、全体のカスケーディング部分です。 あなたが持つことができます - あなたは身体のスタイルを指定することができ、 した後、体内にあるものは、あなたがより多くの特定のスタイルを指定することができ、 物事が期待どおりに動作します。 より具体的なCSSの指定子が優先されます。 私は、それはそれだと思う。 [アリナーム]皆さん、こんにちは。私はあなたの注意を得ることができれば。 私はアリだと私は本当に速いPHPとSQLを介して行くつもりです。 だから我々は開始することができます。 PHPは、PHPの略です:Hypertext Preprocessorの。 あなたはすべて知っている必要がありますようにと、それはサーバー側のスクリプト言語ですが、 私たちはウェブサイトのバックエンドのためにそれを使用する、 そしてそれはどのように計算、舞台裏シーン部分の多くを行います。 構文。これは、C、驚き、驚きのようではありません。 私は先に移動することはできません - それは常にあなたが見ることができれば、、で始まる必要があります。 あなたは、ブレースの新しい種類が必要に見ることができますし、その後も?PHPを必要としています。 それは、あなたのPHPのテキスト、PHPコードをフレームに持っているか、常にです。 だから、ちょうどあなたが初めての試みの上に置く、Cのようにすることはできません。 あなたはいつもそれを囲む必要があります。 そして今、主要な構文は、すべての変数は$文字で開始する必要があるということです。 あなたは、あなたがそれらを定義しているときにそれを行う必要がある、あなたはそれを行う必要があります 後で、彼らにに言及しているとき。 あなたは、常にその$を必要としています。これはかなり、あなたの新しい親友だ。 あなたはしない - Cとは異なり、それは変数の型の種類を置く必要はありません。 あなたは$を必要ですがだから、あなたは、のように、配置する必要はありません int型のxまたは文字列Y、エトセトラ、エトセトラ。 そうわずかな違い。 この結果、PHPが弱く型であることを意味する。 PHPは弱く型言語であり、それが弱いの変数を入力した。 言い換えれば、それはあなたが、変数の型の異なる種類を切り替えることができますことを意味します。 あなたはintとしてあなたの番号1を格納することができ、 あなたはそれを文字列として格納することができます、そしてあなたは、floatとしてそれを保存することができ、 そしてそれはすべてその数1になります。 あなたは様々な形態でそれを保存しているにもかかわらず、 それはまだです - 変数の型は、まだ最終的に保持している。 ですから、ここで見れば、あなたはPSET 7から覚えていれば、 皆さんの多くは、おそらくこれで問題があった。 等号2つ、3等号、4等号。 さて、何4等号はありませんが、2と3があります。 あなたが値をチェックするために2等号を使用しています。 これは、タイプにわたってチェックすることができます。 だから、最初の例で見ることができれば、 私はnum_int == num_stringを持っている。 だからあなたのint型や、文字列の両方があり、技術的には、1、 しかし、彼らはさまざまなタイプだ。しかし、二重等号のために、それはまだ渡します。 しかし、トリプルイコールのために、それは価値だけでなく、様々なタイプをチェックします。 つまり、ここでは、第2の場合に渡すつもりはないことを意味し、 あなたが代わりに3等号を使用しているところ。 だから、あなたがすべての今示されているはずの大きな違いです。 >>文字列の連結を使用すると、PHPで使用できるもう1つの強力なものです。 それは、基本的にはこの便利なドット表記です それはあなたが一緒に文字列を結合することができる方法です。 だから、猫を持っていて、犬を飼っている、とあなたが一緒に2文字列を入れたい場合には、 あなたはピリオドを使用することができ、それは、それがどのように動作するかのようなものだ。 また、単に隣同士にそれらを配置することができ、 あなたは下の例では、ここで見ることができるように、 私は、文字列1、スペース文字列2をエコーし​​ているところ。 PHPはそのように置き換えることがわかります。 配列。今、PHPで、配列の2種類があります。 あなたは、通常の配列を持つことができます。また、連想配列を持つことができ、 そして我々は今、それらを介して行くつもりです。 通常の配列はC言語でこれだけある、 ので、あなたは、番号が付けられているインデックスを持っている。 今私達はちょうど1を作成するために行くと置いています - これは、我々は空の配列を作成する方法ですし、我々はするつもりだ インデックス番号0に入れた。 私たちは、数6、値6を置くつもりです。 ここ一番下にそれを見ることができます。 Where's - インデックス番号1で我々は、値番号4を置くつもりだ あなたは6があると見ることができるので、図4に示すように、あります そして、我々は物事をプリントするように、 我々は試してみて、インデックス番号0に格納された値を出力するとき、 その後、我々は6が印刷されている値が表示されます。クール? だから、あなたのための通常の配列です。 あなたも今通常の配列に物事を追加することができます別の方法 あなただけの末尾に追加することができますです。 つまり、特定のインデックスを指定する必要はありませんことを意味します。 あなたが数を確認することができますし、角括弧内に指定されたインデックスがありません。 そして、それは知っているだろう - PHPはちょうどリストの最後に、次のフリースポットに追加し知っている。 だから、その0スポットで右が1を見ることができます 図2は、第1スポットで右そこに行った。 3は行く - そこにも追加されます。 だから、その種類の意味があります。あなただけの、常にそれを追加して、 そして、我々は、数1のインデックスをエコーし​​ているとき それは値2を出力します。 >>その後、我々は連想配列である配列を持っています。 代わりに、数値的指標を持っていることの連想配列、 彼らは何をやっていることは、彼らが文字列であるインデックスを持っている、である。 あなたの代わりに、見ることができます - 私は、これらすべての数値指標を処分した、 今ではKEY1、KEY2、KEY3だし、彼らはすべての文字列したことを示すために、二重引用符にしている。 だから我々は、この一例を持つことができます。 この一例は、我々はtfは有することがあり、それはインデックス名だ。 私たちは、カロリーを食べ、インデックスで、名前として「アリ」を置くつもりだ 私たちは、文字列の代わりにint型にこの時間を置くことができ、 そして、インデックスが好きで、我々はその中に配列全体を置くことができます。 だから、これは種類のものである - それは我々が持っていた方法と似た概念だ 番号のインデックスが、今、私たちの周りのインデックスを変更することができます 代わりに、文字列としてそれらを持っている。 また、単に個々にそれをやって以外に、これを行うことができ、 あなたは1チャンクにそれをすべて行うことができます。だから、その配列のTFを見ることができます そして、我々は1巨大な角括弧セットにそれらをすべて設定してください。 だから物事をスピードアップすることができます。 それがないよりは文体の選択の詳細です。 また、ループを持っている。 C言語では、このような働きをするループを持っている。 我々は我々の配列を持っていたし、我々はリストの最後にインデックス0から行きました、 そして我々は正しい、それをすべて印刷する? 問題を除き、連想配列のために、である、 我々は、必ずしもこれらの数値指標を知らない 今、私たちは、文字列のインデックスを持っているので。 今、我々は再び、あなたがうまくいけばPSET 7で使用し、foreachのループを使用しています。 のforeachループは単にリストの一つ一つの部分を知っている。 そして、それはあなたが持っている正確に数値インデックスを知っている必要はありません。 だから、foreachの構文を持っているので、それがforeachのです、あなたは配列を置く。 だから私の配列はPSETと呼ばれ、その後、などのワードとして、 そして、あなたが使用しようとしているこのローカルの一時的な変数を入れて ただ特定を保持するために起こっている具体的なもののために - 1インスタンスまたは配列の1セクション。 、PSETのnumは1を保持し、その後、多分それは数6を開催します そしてそれは数2を開催します。 しかし、それは、アレイ内のすべての単一の値を通過することが保証されている。 あなたは、PHPで知っておくべき便利な機能が必要とされ、 終了、空、エコーだから、あなたが特定のファイルをインクルードしていることを確認します。 私は非常にPSET 7を見て、それらの機能を見てお勧めします。 あなたがそれらを知っているかもしれない、 私は間違いなく正確に、それらはすべて何をしているか、知っているだろう。 >>そして今、我々は本当にすぐにスコープを通過しようとしている。 スコープでは、PHPは、C言語とは異なり、ファンキーなものの一種である ので、我々だけですぐにそれを通過しようとしている。 それでは、私たちはそこに持っている矢印で開始しましょう​​。 そして、我々は$ Iで開始するつもりだ。 'i'は0であることを行っているので、変数、 そして私達はちょうどあそこの大きな白い箱に印刷維持するつもりだ。 私たちは、I0で開始するつもりだし、私たちはそれをエコーするつもりだ。 だから、0があります。 そして、我々は、ループによってそれをインクリメントするつもりだ そして、それは1の値になるだろう。 それはforループ、その通過に起こっているので、1つは、3以下である、 そして、我々はそれが再び印刷された参照してくださいとしている。 我々は、2のためにもう一度インクリメントするつもりだ および2は、3未満であるので、ループで通るだろうし、それが2を印刷します。 その後、3が3以上であることに注意しますので、forループから抜け出すだろう。 だから今我々は終了しましたし、私たちはaFunctionに入るつもりだ。 大丈夫。だから、この変数私達が作成したのであることに注意する必要があります 'I'変数は、ローカルにスコープされていません。 つまり、ループにローカルではないことを意味し、 その変数は、我々はまだアクセスし、その後変更し、それはまだ有効となることができます。 あなたは今、関数に入るのであれば、あなたは、我々はまた、 'I'変数を使用していることがわかります 私たちは 'I' + +インクリメントするつもりだ。 あなたはそれが 'I'変数のコピーだと、C言語に基づいて、最初は、と思うだろう。 それが正しいのか、全く別のことだ。 我々はそれを印刷するときので、私たちは、その4をプリントアウトしようとしている、 'I' +印刷しようとしている 申し訳ありません - そして、我々はするつもりだ。 その後、我々は、その関数の外に終了するつもりだ、 そして我々は、その矢印が今ここになるだろう。 それはその後、ただし、関数は「I」の値を変更していてもことを意味し、 それは、関数の外で変化しなかった、 機能は別々のスコープを持っているので。 すなわち、我々は「私」をエコーするとき、それは関数の範囲に変化していないことを意味 ので、我々は再び3を印刷しようとしている。 C.よりもPHPのスコープについてのさまざまなこと >>今PHPとHTMLで。 PHPは、ウェブページを動的にするために使用される。 それはちょっと物事が違う。 我々は、HTMLからのそれは別の持っている。 HTMLで、我々は常にただ、ロブがあったかのように、同じ静的なものを持っている PHPのに対して、ユーザーが誰であるかに基づいて物事を変更することができます。 私はこれを持っているなら、私は、「あなたがとしてログインしている - "を持っているし、名前、 と私は名前を変更することができます。だから、今の名前は、ジョセフです そしてそれは、「私のことを "持っていますが、私もトミーを持つように名前を変更することができます。 そして、それは異なるものになるだろう。 それでは我々はまた、彼についてさまざまなことを変更することができ、 それは名前に基づいて異なるコンテンツを表示します。 だから、PHPは一種のあなたのウェブサイトに何が起こっているか変更することができます。 ここに同じです。それでも、それらは異なるコンテンツを有していることに注意して、 あなたが技術的にはまだ表面に、同じWebページにアクセスしているにもかかわらず。 HTMLを生成する。あなたがこれを行うことができます2つの方法があります。 だから我々は今その権利を通過します。最初の方法は、あなたが持っている、である - ええ、申し訳ありません。 だから、あなただけの、PHPでループの通常のを持っている そして、あなたは、PHPでのエコーとは、HTMLをエコーし​​ます。 ロブは、HTMLスクリプトをユーザーに示したものを使用して そして、ちょうどWebページにそれをプリントアウトするためにPHPのプリントを使用した。 別の方法は、PHPとHTMLを分離するかのようにそれを行うことです。 だから、forループを開始し、PHPの行を持つことができます その後は別々のもので、HTMLの行を持つことができ、 そして、あなたは、PHPで、もう一度、ループを終了します。 だから、それを分離するようなものだ。 左側には、あなたがすべて持っていることができます - これは、PHPのちょうど1塊だ。 右側には、あなたは、PHPのラインを持っていることがわかります あなたは、HTMLの行があり、再度、PHPのラインを持っている。 そこで、彼らがやっていることにそれを分離する。 そして、あなたはそれらのいずれかについて、そのいずれかの方法に注意してくださいよ、 彼らは、静止画、画像、画像をプリントアウトし、 その結果、HTMLはまだ同じように印刷されます。 それから、あなたはまだ3画像をあなたのウェブサイト上に表示表示されます。 だから、同じことを行うための2種類の方法です。 >>今、私たちは、フォームや要求を持っている。ロブはあなたを示したように、 そこにHTMLの形式があり、我々はちょうどこのを通してそよ風ます。 あなたがアクションを持っていて、メソッドを持って、そしてあなたの行動 種類のあなたがそれを送信しようとしているあなたが表示され、方法があるかどうか それはGETまたはPOSTになるだろう。 とGETリクエストは、ロブが言ったように、フォームに入れてするつもりだことを意味します そしてあなたがURLに表示されませんPOSTリクエストに対し、URLとしてそれを見ることができます。 そうわずかな違い。 しかし、同じようなことだと一つのこと POSTおよびGETは平等に安全であるということです。 だから、という理由だけでは、URLに表示されませんと思うかもしれ それは、POSTがより安全であることを意味し、 しかし、あなたはまだあなたが送信している情報であなたのクッキーでそれを見ることができます。 だから、約1または他のことを考えていない。 注意すべきもう一つは、あなたがまた、セクションの変数を持っているということです。 君たちは自分のユーザーID情報を取得するにはPSET 7でこれを使用していました。 何が起きたかというと、この連想配列を使用することができますということでした、 $ _SESSION、その後、別のものにアクセスすることができるしている とページ間で異なるものを格納します。 >>最後の事は、我々は、SQL、構造化照会言語を持っているということです これは、データベースを管理するためのプログラミング言語です。 正確には、データベースは何ですか?彼らは、テーブルの集合だ、 各テーブルは、オブジェクトの同じような種類を持つことができます。 だから我々はあなたの金融PSET内のユーザのテーブルを持っていた。 そして、なぜ彼らは便利ですか?それが恒久的に情報を格納する方法だからです。 それは、物事を追跡し、物事を管理する方法です そして実際には別のページと保持トラックにそれを見て。 一方、あなたはちょうどその1即時瞬間に、それを格納する場合 後でそれを使用してから、あなたが保存されてきたものにアクセスできなくなります。 私たちは、SQLコマンドで使用する4つの主要なものを持っている。 私たちは、選択、挿入、削除、更新しました。 それらはあなたたちがあなたのクイズのために知っておく本当に重要です。 >>我々はすぐに今の選択の上に行くよ。 基本的には、データベースから行を選択している。 あなたはここ、あるのであれば - 我々はこれら2つの異なるものを持って、私たちは、クラス表から選択します ここで素晴らしい - 素晴らしい列の値が1である。 ここで見ることができるように、我々は、クラス名のこれらの2ものを持って CS50とStat110、私たちは、クラスIDとスローガンを持っています。 だから我々はその情報をすべて選択します。 その後は、それは一種の素晴らしいコラムの拾い出しだと右ここで見ることができます すべてのものは1であり、それは、クラスID、クラス名で、それを選ぶことができるというスローガンを有する。 あなたは、コードでこれを正確にどのように行うのですか?あなたは、PHPを使用する必要があります。 だから、この種のPHPとSQLが相互に関連している方法です。 今、私たちは私たちのコードを持っており、我々は我々のクエリー機能を使用するつもりだ 我々はPSET 7で行った、と我々は、SQLクエリを実行するつもりのよう。 その後、我々は持っているつもりです - 我々は常に、falseの場合、行のトリプル等しいかどうかを確認する必要があります。 だからもう一度、あなたは型と値を確認したい、 それが動作しない場合、その後、あなたは私たちがPSET 7で行ったように、いつものように、謝罪したい。 そうしないと、便利なものですべてをループしたい foreachのは我々だけで渡ったことをループします。 今、私たちは、をループしていると我々は、過去のそれを作ったこと 今、私たちは私たちのforeachループを持って、私たちのクエリが渡されたとする。 そして、最初の行は、それが持っているので、ここでは行はここ、だ、それは箱入りだ。 それが得だと、すべての情報を出力するようになるだろう。 だから、一番下にプリントアウトするために起こっている "ワナHTMLをか?" それはループの最初に完成だから、それは、次の行に移動するために起こっている ので、それはそれの2行目を印刷するだろう、 STAT110になるだろうされている、すべての瞬間を検索します。 >>最後に一つには、SQLの脆弱性である。 私はダビデはこの上で、講義中に少し触れて知っている。 後でこれを読むことができます。それは本当に面白いです。 SQLインジェクションは、トリッキーなものの一種である。 例えば、あなたがちょうどあなたのクエリにこれらの変数を貼ることを言わせて、 あなたはその最初の行で見ることができるように。 だから、右、罰金だ?あなただけのユーザー名に入れている と、SQLクエリにパスワード、そしてあなたがそれを出荷し、データテーブルには何でも手に入れたい。 これはかなり簡単なようです。だから、誰かが中に入れますと言うことができます パスワードには、右ここでこのまたはテ​​キスト - 実際に赤いボックスにする必要があります。 それでは、彼らがにそのパスワードを入れるとしましょう​​ - それは彼らが入力した内容だ。 そこで、彼らは= 1 "1"を入れたりしています。 持っている愚かなパスワードのようなもの。 、今度はそれを中に置き換えてみましょう、あなたは今ではSQLクエリであることに注意します あなたは注意しますので、それは、常にtrueと評価され、その あなたはSQLクエリは、この情報のすべてを選択することができます それとも、ただ1 = 1を持つことができます。 だから、常にtrueと評価するだろう。 それはハッカーがシステムに侵入できることを意味しますので、それは、本当に仕事に行くのではない。 これを解決するには、PDOシステムを使用しなければならないことです、 これは、疑問符を使用する必要があることを意味します その君たちがPSET 7で使用したものであり、 あなたが何かを配置する場所の代わりに疑問符を使用するつもりだところ、 そして、あなたはカンマを持っているつもりだし、あなたが後で必要があります あなたの文字列の後に、あなたの疑問符に置き換えたいの異なる変数。 だから、今私は、これらの赤い疑問符を持っていることをここで注意します。 私はその後、この順序でそれらを置き換えるために知っているので、私は私の文字列の後に変数を置く。 つまり、もし誰かがこのようにそれを行うことが確認されます、 彼らは確認しますか1 = 1の状況を、持っている、 バックエンドで、それが実際にSQLクエリを壊さないように注意してください。 さて、それは、PHPとSQLの旋風かなりそれだそう。 あなたのすべてに最高の幸運、そして今オレゴンへ [Oreoluwatomiwa Babarinsa]オーケーみんな。いくつかのJavaScriptをかけて行く時間 といくつかの他のものは非常に迅速に私たちは今夜あなたを保持しない。 JavaScriptを。はい。 JavaScriptはうわさによれば、クールなものの一種である。 あなたが本当にJavaScriptをについて知っておくべきことは、それは一種のようなものだ あなたのWeb​​アプリがやっているように何が起こっているかのクライアント側のエンド。 あなただけの、サーバー側ですべての時間の世話をしたくないいくつかのものがあります。 一つのことを強調し、すべてのほとんどの相互作用は、何かが消えて作る。 あなたは本当にあなたのサーバーにそのためのすべての時間を話してしたく​​ない。 そして、それのいくつかはサーバ側で行うことも可能ではありません。 我々はJavaScriptのようなものが必要があるのはこのためです。 JavaScriptの約クールなものは:これは、動的に型付けされている。 これが意味することは、プログラムが知る必要はないということです あなたはそれを書くときに何を、正確に、変数である。 それは実行しているように、それだけで一種のそれを把握します。 それについてクールだ他のこと:それは中括弧言語ですが、 その構文はC言語とPHPと同様であることを意味します。 あなたは、JavaScriptを学んでいる時に多くのリワークを行う必要はありません。 ここでは、JavaScriptを少し持っている。 右ここ興味深いのは、あなたがそれを見れば、ということで、 私たちは、headタグにすぐそこのJavaScriptのビットがあります。 どのようなことは基本的にJavaScriptファイルが含まれていない。 これは、あなたのプログラムにJavaScriptを含めることができる一つの方法です。 次に、第2少しは、実際にいくつかのインラインJavaScriptのです CSSを使用したインラインスタイルに非常によく似て、 とするだけで、非常に迅速にそこにいくつかのコードを書いている。 JavaScriptは配列を持っています。 非常に便利な、周りのデータを保持するだけで、別の方法です。 非常に素晴らしく、簡単な構文。 あなたはすべてにアクセスして、一緒にすべてを保つために、角括弧を使用しています。 複雑すぎて何もない。 一般的にJavaScriptとスクリプト言語についてのクールなもの あなたは配列サイズを心配する必要はないということです。 ちょうどArray.lengthとを使用し、それを追跡することができ、 あなたはそれがする必要があるとしても、配列は、拡大または縮小することができます。 だから、あなたも、あらゆる種類のを心配する必要はありません ああ、いや、私はより多くのもの、またはそのようなものを割り当てる必要があります。 こちら>>クールなことは、JavaScriptのオブジェクトと呼ばれるものを持っているということです。 それはオブジェクト指向言語なので、それはしているものを、本質的に、 構造体に多少似てグループ化データへのあなたのための方法、 しかし、あなたは、構造体のような、または連想配列構文でアクセスすることができます。 それは非常に簡単ですし、あなたがこれを行うことができることをグループのデータであり、 あなたが関連のデータの束を持っている場合。 それはあなたが車を記述するために必要なすべてのものなので、 あなたはさまざまな場所の束でそれを持っている必要はありません。 あなただけのJavaScriptで1オブジェクトにくっつけることができます。 あなたはおそらく知っているように、反復処理は、これらの面倒な作業の一つです。 あなただけ何度も何度もかけてそれを行う。あなたが車の中ですべてのオブジェクトに話をする必要がある、 または、リストまたはそのようなことにすべての項目を通過する必要があります。 そうJavaScriptは、PHP、foreachの構文に似ています。 この場合には、ループ内でのためだ。 あなたはオブジェクトのみでこれを使用したい。 あなたは、配列でこれを使用する場合に発生するいくつかの問題があります。 それは一般的に、しかし、それは非常に便利ですが、それらのものの一つです あなたは多くのオーバーヘッドをなくすため、 あなたが自分でオブジェクト内のすべてのものをプルアップする必要がないため。 あなたはすべてのキー名を覚えておく必要はありません。 あなただけの並べ替えのこの構文でそれらを取り戻す。 この中、探して、あなただけ覚えておきたい あなたは、テーブルのハッシュに非常に似た方法で、すべてのキーをバック得ていること。 あなたはそれとは覚えている場合は、文字列に置くとするときには、何かを得ることができる それはそれに関連付けられた値を有するであろう。 あなたはこれを行うことができますことは、あなたは、すべての権利を言うことができている 私は車に入れ、私はフェラーリと呼ばれる。 だから、後でもう一度文字列にフェラーリに置くことができ、あなたはそれを出すことができます。 そして、あなたは、ループ内のために、ループ内でそれを行うことができます。 だからオブジェクトの詳細。あなたは覚えておく必要がこれから重要なの 、これらをいつでもあなたは構文のようなオブジェクト構造体を使用することができるということです どのようなあなたが文字列として使用するつもりは有効な変数名でない場合を除いて。 あなたがそのそこを見ればそう、我々は、スペースでキーを持っています。 さて、あなたはobject.key置くとしたら、スペース、と、スペース、スペース、 それはちょうど、構文的に意味がありません。 だから、唯一のブラケット構文のこの種でそれを行うことができます。 >>また、JavaScriptは非常に適用範囲ごとのPHPにある。 あなたは、スコープに対処する2つの方法があります。 あなたは、変数の前にVARを持つことはできません、 それはまさに、これがグローバルであることを意味します。 あなたはどこからでも見ることができます。あなたはif文でこれを入れていたとしても、 どこか他のコード内のそのポイントの後には、その変数を見ることができました。 もう一つは、しかし、VARであり、それはあなたがインチなら何でもする機能に限定されます あなたは関数でない場合は、まあ、それは世界的だ。 あなたは、関数内にある場合、それは、その関数内でのみ表示されます。 私はええ、例を持っていますが、ありません。それはどこにそれらのものの一つだ あなたがグローバルになりたいものを変数で管理することができ、 どのような変数をローカルにしたいが、あなたはこのことについて注意する必要があります、 あなたがC言語で行い微粒子制御のタイプを持っていないため、 何かが、forループ内で宣言されている場合は、forループという点で滞在する予定のWHERE。 我々は実際にJavaScriptを使用して気に事は右、Webページを操作している? 私が意味することは、なぜ我々はこれをやっているのです。 >>そのためには、我々は、DOMと呼ばれるものを使用しています。 ドキュメントオブジェクトモデル。 基本的に、どのようなそれがないと、それは、すべてのHTMLを取ります お互いの中にネストされているオブジェクトの束へのモデル、それを。 あなたはこのようなものから始める。 あなたは、それは一種のだそこに、私のために右に、コードの束を持っている - あなたはそれを操作するのは非常に難しいですね、と思うだろう、 テキストの束によって解析することと思いますので、 物事を離れてつなぎすること。そして、それが正しく何がフォーマットされていない場合はどうなりますか? 悪いことが起こるでしょう。 だから、JavaScriptはあなたのためにこれの世話をする、あなたは素敵なデータ構造を取得する あなただけの文書を持って私の左の上の1、のような その内には、HTMLと呼ばれるものを持っている その内には、頭と体を持っている その頭の中には、エトセトラ、エトセトラエトセトラをし、タイトルを持っている。 これは、それだけのように、Webページを操作する簡素化 ああ、私はちょうどこのオブジェクトに話をしたい。 あなたはあなた自身を作った別のオブジェクトに話すだろう、非常に同じように並べ替え。 私が言ったように、すべてのDOMドキュメントオブジェクトである。 どちらか、それだけで一つの場所だと、あなたは、物事を見つけるために、その中に行くことができます あなたはそれを行うことができます - これはそこまで、それを行うための古いスタイルである、 あなたがのdocument.getElementByIdを行い、どこで、名前、 そしてあなたはおそらく言うことができるように、これはしばらくすると、非常に扱いにくく取得します。 だから、おそらくこれを行うにはしたくない。我々が持っている理由です 我々はこの後、約お話するつもり次の事。 ここで重要なことは、そのすべての権利、あなたは正しい、これらすべての要素を持っている? そのため、おそらく私は、ページのロード時に何かの色を変更することができます。 だから何?何私のユーザーが何かをクリックした場合? 私は、彼らが何かをクリックしたときに、それが面白いことをやってみたい。 我々は、イベントを持っている理由です。 あなたは、基本的には、あなたのDOM内の任意の要素を見つけることができ、 して、ちょっと、と言う。これは、ロードしたり、誰かがそれをクリックすると または、彼らはマウスその上、それを使って何かをするとき。 そして何を持っていることはあなたがあなたのためにこれを処理する機能を持っている、である。 これらの関数は、イベントハンドラである。 何すばらしいスタイル - それは言うだけの空想の方法です、 このイベントが発生したときに、この関数は、実行されます。 だから、発生するイベントを処理します。 これにより、イベントハンドラを配置する方法です。 私はいくつかのボタンがあり、あなたがそれをクリックすると、それが爆発する。 だから、ボタンをクリックしないでください。 これは右、それに接近する一つの方法です? 、ボタンタグがあり、クリックであなたが言う文字列が ああ、ところで、私は私のために、この爆発のことを行う。 そうでなければ、それだけで作成したばかりの、通常のボタンのようなものだ。 また、この別の方法を行うことができますが、 DOM要素をつかんによってではなく、我々はjQueryの話をした後にあることを節約できます。 jQueryの:それは、クロスブラウザでライブラリです。 あなたはほとんど何でそれを使用することができます。 それだけであなたにで動作するようにツールの多くを提供します。 JavaScriptは、パワフルながら、あなたは必要なすべてのツールを持っていないため、 本当にあなたがやりたいことがあるWebアプリケーションを取り組むために箱から出し。 だから、多くのものを簡素化あなたに多くの機能を提供します 普段何度も何度も、自分で作成しなければならない箱から出して。 そして、ちょうど物事は非常に簡単になります。 また、あなたはこれらすべての要素を取り出してみましょうセレクタを持っている あなたのDOMからはるかに簡単に、代わりにこれらの非常に長い関数呼び出しを使用する必要がある。 これらのセレクタの詳細。あなたが持っているそこまで、持っている、のは言わせて 私は、IDを持つ要素を取得したい "岩" さて、jQueryのでは、それだけで$してから、ポンドを持っている文字列をしてからだ」と岩。 " それは非常にシンプルで、この問題に取り組むの伝統的なJavaScriptの方法よりもはるかに高速です。 そして、あなたはクラスや要素タイプのため、同様のものを持っている。 jQueryのは - クールな機能の1つは、一種の圧縮することができますです あなたのDOMにクエリダウン非常に、非常に高速。 今、私たちは戻ってイベント処理をしているが、これはあなたがjQueryの内の1つのイベントを処理する方法である。 それでは、私たちがここで起こっているのは、我々はすべての権利、と言っているである。私は、スクリプトタグを持っているよね? だから私はこのインラインJavaScriptを持つ。 私たちがやろうとしていると、我々はすべての権利、と言うつもりです。 文書には、文書がロードされているのを意味し、準備ができたとき 、我々はその関数に入るとしている、と我々は、すべての権利を言おうとしている この関数は、実際に何かをやっている。 それは基本的にすべての権利、私にIDを持つ要素を取得、言っている「MYI​​Dを。 " そして、このあなたがそれをクリックしたときに実行される関数ハンドラを与える。 基本的にこれは何をするか、それはすべてが正しい、と言います。 、ページがロードされているので、私は、この要素を見つけるつもりだ それをこのイベントハンドラを与え、それは基本的にあなたのためのページを設定します。 そして、これはあなたがイベント処理を考えるする方法である。 あなただけの、考えるようにすべての権利、何かが発生したときに、私が起こることを何をしたいのか? あなたは、大丈夫、私はこの事にしてください、この事の話をする必要があり、考えたくはありません この事何とか何とか何とか、あなただけのイベントの面でのことをお話したいと思いますので。 これが発生すると、これが起こります。これが起こるとき、それは起こります。 物事が他のことをトリガーした場合と、それは素晴らしいことです。 しかし、あなたは、複雑なコードを試してみて、行うにはしたくない あなたは、同時に複数の物事をトリガしている場合には、 あなただけの自分自身に頭痛を与えるつもりだから。 >>すべての権利。今、我々は我々のページがイベントを処理するために取得することができ、 しかし、ここでは私のユーザーがボタンをクリックしましょう​​。 私は、サーバーにその要求を送信する場合は、 新しいページをリロードする必要があるため、私は、ページをリロードする必要はありません ひとつひとつの時間がちょっと退屈取得し、私は​​なぜ必要なのですか もう一度もう一度ヘッダーをプルダウンして、フッターに、 再度ページのすべての要素 ただ挨拶や時間を更新する? 我々はAjaxのようなものを持っている理由ので、それはです。 私たちはAjaxをここで行うことができることは、我々は、すべての権利を言うことができている 私は、サーバーにデータを送信したい、 と私は私のページを更新できるように戻って応答を取得したい、 または多分ちょうど必ずしもユーザには何も表示されませんいくつかのアルゴリズムの計算を行います。 あなたがこれを行うには何が必要ですか?さて、あなたはあなたが話をする必要があるURLが必要です。 このサーバーは、単に魔法のどこから聞くことができない。 あなたはこのデータを送信している特定の場所を持っている必要があります。 そして、あなたはまた送信するためにいくつかのデータが必要な場合、または多分それはデータレス·クエリの。 あなただけのサーバーへのpingを実行したいと言って、ちょっと、私は生きている、またはそのような何か。 そして、あなたは基本的には成功して処理する関数を求めています。 例えば、あなたがあなたのサーバーからいくつかの情報を取り戻すとしましょう​​、 あなたは自分のページ上でのユーザーのタイトルを変更したい。 だから、戻って情報を得るだろう、 あなたが画面にそれをプッシュするだろう。 何が起こるのページは準備ができているとき、ある、 あなたはグリータと呼ばれるこのボタンのクリック機能に作成します。 これは次に行うことは、そのボタンが押されたとき、であり、 あなたはgreetings.phpする話を、あなたは、POSTリクエストをする あなたはちょっと、私にあなたのページから何かを得る、と言う。 私たちは本当に、それを記述する必要がありますが、greetings.phpはありません ちょうど、戻って与えましょう」の世界こんにちは。 " だから我々は、「Hello World」の、これを取り戻すとこれの成功時 何がうまくいかないと仮定すると、我々だけで、この目的の場所に行く 我々は指定された、我々はそこで応答を固執すること。 そして、これはAjaxのクエリを設定するための非常に簡単な方法である。 >>非常に迅速に、ロブは一種の、すでにこれを述べた 物事がうまくいかないことができ、悪いことが起こることができ、 ですから、これらのHTTP応答コードをお読みください。 何これらはは単なる、200のように、すべてが大丈夫行っている。 何か他のもの、悪い事が起こった。 これは、一般的にあなたが覚えておきたいことだ。 しかし、それはこれらのすべてを知ってうれしいです。 そして最後に、かつて我々はすべてのことを経験しましたが、 我々は、デザインについて非常に迅速に話をする必要があります し、私たちはあなたのすべてが去るせることができます。 デザイン。あなたは覚えておきたいもの。 これらの質問を自問:誰がこれを使うことになるでしょう? 彼らは何のためにそれを使用しているのだろうか?私のユーザーは何を気にしますか? 彼らは何を気にしない? あなただけのアプリを作って、それだけで成長させたくない そしてこの巨大な、あなたも完了しないことができるすべてのかかるものとなって。 あなたが対処したい個別の目標と計画し、物事を持っていると思います。 それは楽にする。このすべてが、基本的に言う それは簡単なユーザーがそれを使用できるようにするため、実際には、それはスライドのようなテキストの巨大なBLOBであることを確認していません。 あなただけに行くために誰かのためにそれは非常に簡単です、何かになりたい そして、彼らがやりたいこと。 あなたは彼らが5ページを移動する必要がありますする必要はありません サイトのごプライム機能を取得する。 あなたも何かを検索することができる前にGoogleは5ページを持っていた場合、 誰もそれを使用しないであろう。 そして最後に、紙のプロトタイプ、フォーカスグループ。 グッドデザインとテスト運用を行っている。 あなたはそれがあなたのために働くと思うからといって、 他の誰それが動作すると考えているわけではありません。 しかし、ええ、それはそれだ。 [CS50.TV]