Ханна Блумбэрг: Прывітанне ўсім. Мы збіраемся пачаць усяго пару хвілін раней паколькі ў нас ёсць цэлы шмат матэрыялу, каб прайсці. Я Ханна. Я TF. Марыя збіраецца далучыцца нам усяго пару хвілін. Раздзел Яна выкладае прама перад. Я вучу раздзел права пасля, так што мы збіраемся трымаць яго ў паўтары гадзіны. Такім чынам, як вы ўбачыце тут, у нас ёсць дастаткова некалькі тэм, мы павінны прайсці, такім чынам, мы будзем ісці трохі хутчэй. Але калі ў нейкі момант мы нешта сказаць занадта хутка або вы не разумееце, не саромейцеся, каб перапыніць з пытаннямі. Мы хочам, каб мець магчымасць зрабіць гэта агляд сесіі ў якасці карыснай для ўсіх вас наколькі гэта магчыма. Высокі. Такім чынам, давайце скакаць прама ў з некаторыя тэмы, якія мы на самай справе вельмі, вельмі коратка разгледжаны для Тэст 0 на агляднай сесіі віктарыны 0. Так, пачынаючы са звязанымі спісамі. Так што пераканайцеся, што ў вас ёсць некаторыя базавыя веды аб звязаных спісаў і зручна рабіць некаторыя з асноўных аперацый. Так што проста разгледзець, звязаныя Спісы лепш, чым масівы таму што яны могуць расці дынамічна. Такім чынам, мы маем вялікая перавага, што. Мы бачылі іх выкарыстоўваць у хэш-табліц, калі мы не ведаю дакладна, колькі рэчы, якія мы збіраемся хочаце ўставіць у нашай структуры дадзеных. На жаль, у нас ёсць кавалкі звязаны спіс за ўсё памяці, такім чынам, мы не абавязкова будзе ў стане зрабіць пастаянны доступ часу да любога элементу ў звязаным спісе. Для таго, каб знайсці канкрэтны элемент, мы ёсць для перабору ўсіх спосаб з самага пачатку. Так што майце на ўвазе, што большасць з Асноўныя аперацыі Амега 1. Так ўстаўка толькі збіраецца ўзяць 1. Выдаліць збіраецца ўзяць п, так як мы павінны пайсці і знайсці яго ў спісе. І пошук можа заняць, у горшым выпадку, п. Мы не можам зрабіць нешта накшталт бінарны пошук на звязаны спіс Паколькі мы не можам проста выпадкова перайсці да сярэдзіны. Прахладны. Высокі. Трохі стэкаў. Гэта, зноў жа, прыйшлі на віктарыне 0, так што вы павінны быць супер камфортна з ім. Але для стэкаў, мы просім вас запомніць стэк талерак. І гэта будзе першы ў, апошні з. Такім чынам, мы стэк рэчы у стэку, а затым калі мы спрабуем узяць што-то off-- якія мы называем з'яўляюцца ад stack-- мы адарвацца ад вяршыні. І калі мы хочам, каб пакласці што-то у стэку, мы называем гэта штурхае. Такім чынам, гэта заўсёды будзе растуць знізу, як стэк латкоў. Высокі. Мы бачылі стэкі рэалізаваны з абодвух звязаныя спісы і масівы. Калі вы рэалізуеце з масівамі, вы хочаце каб пераканацца, што сачыць за І памер, і прапускная здольнасць. Так памер будзе ток Колькасць рэчаў у вашым стэку, у той час як магутнасць складае агульная колькасць рэчаў, якія вы можаце захоўваць у стэку. Прахладны. Вельмі дакладна гэтак жа, у нас ёсць чэргі. У гэтым выпадку, замест таго, каб думаць аб стэк талерак, думаю лініі. Гэта будзе першы ў першы выйшаў. Так што, калі вы выстройваюцца ў чаргу за то ў краме, мы спадзяемся, што чалавек упершыню ў Лінія будзе дапамагчы ў першую чаргу. Замест таго каб сказаць штуршок і поп, як мы робім для стэка, мы проста кажам у чаргу і вываду з. І зноў жа, калі вы рэалізацыі гэтага з масівам, мы павінны сачыць за не толькі памер і магутнасць, але таксама кіраўнік, які будзе пярэдняя нашай чаргі. Прахладны. Любыя пытанні па любой з, што? Высокі. Рухаемся далей. ОК, хэш-табліцы. Вось дзе ён пачынае атрымаць сапраўды цікава. Такім чынам, хэш-табліца адна рэалізацыя асацыятыўнага масіва. Таму ў асноўным тое, што адбылося з'яўляецца ў нас ёсць усе гэта ўваход, і мы даем яго ў хэш функцыя, якая кажа, ОК, гэта дзе ў Хэш-табліца належыць. Так найпростым хэш-функцыі што мы бачылі толькі кажуць, ОК, выкажам здагадку, мы хочам, каб пакласці радкі ў нашай табліцы. хэш- І сапраўды простая ідэя можа быць, каб сказаць, добра, давайце проста Сартаваць па Першая літара гэтага слова. Такім чынам, вы можаце бачыць тут, мы бярэм банан, пакласці яго праз хэш-функцыі, і ён кажа, эй, што павінны пайсці на індэкс 1. Такім чынам, мы можа істотна думаць пра хэш Табліца ў кучу розных вядра. І кожны з гэтых каўшоў адбываецца каб трымаць галаву звязанага спісу. І ў гэтым звязаны спіс, дзе мы можам фактычна паклаў розныя часткі дадзеных. Так дайвінг трохі больш у хэш-функцыі, вось прыклад я проста апісана, дзе мы проста кажам, ОК, узяць першую літару словы, і мы збіраецца разбірацца ў вёдрах. Так, як мяркуецца, там будзе 26 вядра, па адным для кожнай літары алфавіту. Чаму гэта не вялікая хэш-функцыя? Што робіць гэты не-ідэал? Так. АЎДЫТОРЫЯ: Вы збіраецеся мець сутыкненняў. Ханна Блумбэрг: Так, менавіта так. Вы будзеце мець сутыкненняў. Дык вось адна рэч. І мы будзем казаць пра тое, як мы можам выправіць сутыкненняў ўсяго секунду. Яшчэ адна праблема з гэтым прыватнасці хэш-функцыя з'яўляецца тое, што наша адрозніваецца Каўшы будзе даволі рэзка розных памераў. Мы ведаем, што ёсць шмат больш слоў, якія пачынаюцца з А, чым X, такім чынам, мы будзем мець вельмі незбалансаваныя вядра ў нашай табліцы. хэш- Прахладны. Так што, так, давайце вернемся да кропка сутыкнення. Што нам рабіць, калі ёсць сутыкненне? У нас ёсць некалькі розных варыянтаў. Такім чынам, адна, таму выкажам здагадку, што мы спрабуем пакласці ягаду ў нашу хэш-табліцы. І мы бачым, аб, мы хочам каб пакласці яго ў індэкс 1, але банан ўжо жыве там. Тое, што мы збіраемся рабіць? У нас ёсць два асноўных варыянту. Нумар адзін, мы можам казаць, ОК, няма ніякай пакоя ў індэксе 1, але давайце проста трымаць гледзячы праз пакуль мы не можам знайсці іншы адкрытае месца. Так мы будзем казаць, добра, давайце пакласці яго ў месцы 3. Гэта адзін варыянт. Гэта называецца лінейнае зандаванне. І другі варыянт кажа, добра, добра, давайце проста зрабіць кожны з гэтых вёдраў быць кіраўнікі звязаных спісаў. І гэта нармальна, калі ёсць больш чым адной рэчы ў вядро. Мы проста збіраемся дадайце яго на фронт. Таму тут можна ўбачыць, добра, калі мы ўставілі ягаду, мы проста ўзяў банан, выгляд штурхнуў яго на трохі і кінуў ягаду там. І гэта таксама цалкам нармальна. Гэта называецца асобны ланцужкі. Вы можаце думаць пра гэта як-то накшталт масіў з кіраўнікоў у звязаных спісах. Любыя пытанні па хэш сталы, хэш-функцыі? Высокі. Дрэвы і спрабуе. Такім чынам, дрэва якой-небудзь структуры дадзеных у якім ёсць свайго роду іерархіі ці нейкі ранжыравання вашых розных аб'ектаў. І гэта стане супер ясна, калі мы бачым прыклад. І мы ўбачылі спробаў, а з хэш-табліц, у pset5-- якія, зноў жа, зусім справядлівая гульня для гэтага quiz-- як іншы дадзеных структуры, якія мы можам захоўваць розныя рэчы. У выпадку слоўніка, мы захавалі кучу слоў. Такім чынам, давайце зірнем на некаторыя дрэвы. Такім чынам, гэта з'яўляецца прыкладам дрэва. Ён мае такую ​​структуру, іерархічнай структуры, якая, дзе вы можаце ўбачыць, што гэта 1 вузел у верхняй ёсць нейкая рангу вышэй 2 і 3, якія перавышаюць 4, 5, і 6 і 7, якія вышэй за 8 і 9. Так што ўсё, што мы маем на ўвазе пад дрэва, так што вы можаце проста выгляд выявы ў вашай галаве. Цяпер у нас ёсць некалькі больш спецыялізаваныя дрэвы. Так адным з прыкладаў з'яўляецца бінарнае дрэва. І бінарнае дрэва, зноў жа, будзе структура дадзеных з нейкай Іерархія, але кожны з вузлоў можа мець не больш за два дзяцей. Вось дзе слова паходзіць ад двайковага. Такім чынам, гэта прыклад двайковага дрэва. Так што гэта менш, катэгорыя дрэў. Зараз давайце яшчэ больш канкрэтна і казаць пра бінарнай trees-- бінарнага пошуку дрэвы, а. Так вось ідэя не толькі робіць кожны вузел мае не больш двух дзяцей, але ўсе дзеці ў левы будуць менш і ўсе дзеці ў Справа будзе больш. Так заўважыць у толькі наш бінарнае дрэва, ёсць Няма сувязі паміж лікамі. Але ў нашым бінарнага пошуку дрэва, мы бачым, ОК, вось 44. І кожны нумар злева 44 з'яўляецца менш, і ўсё направа больш. І, што трымае на кожным ўзровень дрэва. Такім чынам, тут, гэта менш, чым 22, і гэта больш, чым 22. І гэта бінарнае дрэва пошуку. Чаму мы думаем, што называецца бінарнага дрэва пошуку? Які алгарытм гэта вам нагадвае? АЎДЫТОРЫЯ: Двайковы пошук. Ханна Блумбэрг: Двайковы пошук. Таму што, калі вы шукаеце Нумар, у гэтым дрэве, у кожнай кропцы, вы можаце проста пастукаць ад паловы дрэва, які з'яўляецца вялікім. І так, што адбываецца, каб даць нам нешта што выглядае як бінарны пошук. Любыя пытанні? Добра, крута. Добра, спрабуе. Ўлюбёнец. Так што гэта прыклад таго, што мы бачылі кучу ў класе. І зноў жа, гэта проста яшчэ адзін так, што мы можам захоўваць дадзеныя. У выпадку слоўніку, зноў жа, гэта проста будзе струны. Такім чынам, давайце паглядзім, што гэта на самай справе Падобна на тое, на некалькі больш нізкім узроўні. Такім чынам, давайце зірнем у адным вузле ў сінтаксічнага дрэва. І мы бачым, добра, там збіраецца быць лагічны і вузел, паказальнік на вузел. І мы бачым, што Лагічнае называецца is_word. Так па сутнасці, гэта збіраецца адпавядаць у гэтых маленькіх трыкутнікаў, якія кажа, калі вы атрымалі тут, Вы знайшлі поўнае слова. Мы ведаем, што "Турынг" над вось поўны слова, у той час як толькі Т-У-Р не слова таму што мы не бачым, што мала дэльту. І, што мала дэльта, зноў жа, адпавядае гэтаму is_word, гэты лагічны is_word. І тады ў нас ёсць масіў дзяцей. Такім чынам, на кожным узроўні, вы ёсць канкрэтны вузел, і што вузел паказвае на Масіў ўвесь алфавіт. Такім чынам, вы можаце бачыць, зноў жа, у гэтым picture-- Я будзе трымаць скачкі назад і forth--, што гэты масіў у верхняй мае кучу розных вузлы, якія паступаюць ад яго. Ён мае 26 ці 27, калі вы хочаце ўключыць дадатковы знак. І гэта дае нам спосаб захоўвання нашых дадзеных такім чынам, што можна паглядзець на што вы можаце паглядзець супер хутка. Што такі час пошуку для сінтаксічнага дрэва? АЎДЫТОРЫЯ: [неразборліва]. Ханна Блумбэрг: Так. У тэорыі, гэта сталая часу. Гэта толькі збіраецца быць памер Слова, якое вы хочаце паглядзець. Нават калі мы дадамо Zillion больш слоў у нашым сінтаксічнага дрэва, ён не збіраецца, каб узяць нас больш, каб вызначыць, калі дадзенае слова ў сінтаксічнага дрэва. Так што гэта сапраўды прыемна. АЎДЫТОРЫЯ: толькі Ці вам ініцыялізаваць гэты масіў? Вы прапусцілі кропку ці два. Вы можаце проста пагаварыць пра што на секунду? Ханна Блумбэрг: Вядома, абсалютна. Добры пытанне. Пытанне было, мы ёсць масіў, што гэта будзе мець вузел зоркі, як у адрозненне ад проста вузла, праўда? Прахладны. Дык вось тое, што мы гаворым, гэта наш масіў гэта проста будзе паказальнікамі на іншыя масівы. Так што гэта essentially-- яго выгляд адчувае, як звязаны спіс такім чынам дзе кожны з гэтых дзяцей проста паказваюць на наступны вузел. І тое, як мы на самай справе вызначыць, эй, добра, мы паўторны праз увесь Слова, гэтае слова ў слоўніку, мы проста праверыць гэтую is_word. Вялікае пытанне. Так. АЎДЫТОРЫЯ: ОК. Дык што ж асяроддзе для сінтаксічнага дрэва? Ханна Блумбэрг: Вядома. Так падчас выканання для сінтаксічнага дрэва для пошук будзе пастаянная часу. Так што гэта проста збіраецца быць колькасць літар у слове. Гэта не залежыць ад Памер слоўніка або памер структуры дадзеных. Дык вось трохі больш просты прыклад. У гэтым выпадку, вы можаце бачыць, што слова Лятучая мыш у слоўніку і ў вас ёсць зум, але вы ня ёсьць нешта накшталт заапарка. Як бы мы зрабіць заапарк? Як дадаць заапарк да нашага слоўнік, на наш сінтаксічнага дрэва? Так. АЎДЫТОРЫЯ: Зрабіце is_word дакладна для [неразборліва]. Ханна Блумбэрг: Добра. Такім чынам, мы б сказаць, Z-O-O, а затым мы б хочаце праверыць гэтую скрынку ад а. Выдатна. Давайце параўнаем вельмі коратка спрабуе супраць хэш-табліцы. Спрабуе сапраўды выдатна таму што, як мы ўжо казалі, яны забяспечваюць сталай часу пошуку. Але велізарны мінус гэта яны велізарны. Вы можаце атрымаць пачуццё, нават гледзячы на ​​яго, што збіраецца ўзяць велізарная колькасць памяці. Так яны збіраюцца быць нашмат больш, чым хэш-табліцы, але яны збіраюцца, каб даць нам нашмат хутчэй раз падстаноўкі. Так што накшталт вашай кампраміс, тое, што вы клапоціцеся о, будзь то хуткасць або памяць. Любыя пытанні па любой з, што, усе структуры дадзеных C. Прыгожая. ДОБРА. Мы збіраемся, каб перайсці на трохі трохі вэб-распрацоўкі з Марыяй. МАРЫЯ ZLATKOVA: Выдатны. ДОБРА. Ханна Блумбэрг: Вы можаце выкарыстоўваць свой ноўтбук. МАРЫЯ ZLATKOVA: Ніца. ОК, крута. Як мы рухаемся ў цяперашні час на вэб развіцця, мы крыху пагаварылі аб змене правоў доступу файлаў і каталогаў так што яны могуць быць даступныя іншым карыстальнікам, да свету, і так, што мы можам убачыць, як у асноўным мы можам перадаць іх калі мы распрацоўваем такія рэчы, як вэб-сайты што мы ў асноўным рабілі. Такім чынам, мы ўбачылі каманду CHMOD, што змена рэжыму, у асноўным. Гэта каманда Linux і Ён мяняе правы доступу аб'ектаў файлавай сістэмы. І аб'ект файлавай сістэмы проста каталог, файл, усё, што вы можаце змяніць дазволу. Такім чынам, каб убачыць правы доступу да файлаў, мы набіраем каманду Ls, спіс -l. І калі мы ўводзім, што мы звычайна бачыце некаторыя правы якія выглядаюць накшталт як гэта перад імем каталога. Так г ставіцца да каталога. І тады ў нас ёсць тры трыяды, што ў асноўным см дазволаў альбо карыстальнік, група, ці свет. Тыпы дазволаў, што мы можам ёсць для гэтых трох груп людзей альбо R для чытання, W для пісаць і выконваць на х. І мы можам мець тыя, для група і свет, а таксама. Складаная рэч, што часам калі мы увядзіце каманду CHMOD, мы павінны ўвесці некаторы колькасць якая складалася з трох бітаў. Такім чынам, мы маглі б зрабіць, як 777 і што ў прынцыпе спаслаўся на дададзены кошт кожнага з гэтых трыяд таму што г будзе ставіцца да 4, ж бы гл 2, а х будзе ставіцца да 1, таму, калі падсумоўваюцца, кожнае з лікаў сыдзе з агульным лікам кумулятыўнага значэння паміж 0 і 7. Такім чынам, мы таксама маглі б 0 для якіх-небудзь дазволаў на ўсё. І, што б даць нам у асноўным дазволаў для кожнай карыстальніка, група, ці свет. Любыя пытанні па гэтым так далёка? АЎДЫТОРЫЯ: Вы сказалі, чытаў, было 4? МАРЫЯ ZLATKOVA: Так. АЎДЫТОРЫЯ: [неразборліва]. Ханна Блумбэрг: Так. АЎДЫТОРЫЯ: А потым, дадаўшы ўсе тыя іншыя будуць паказваць нумар. МАРЫЯ ZLATKOVA: Так. Так. Гэтыя вялікія пытанні. Выдатны. Далей, мы скокнулі ў HTML і а крыху больш пра вэб-распрацоўцы. Так проста азначае, HTML Мова разметкі гіпертэксту. І гэта разметка мова, які з'яўляецца стандартным што ён выкарыстоўваецца для стварэння вэб-старонак. Гэта называецца мова разметкі таму што гэта на самай справе не складзены. Гэта не кажа, як нейкі код павінен быць выкананы або што-небудзь падобнае. Гэта проста акрэслівае і апісвае, як вэб- старонка павінна быць створана з кожным з яе элементаў і як яны павінны выглядаць для карыстальніка. Некаторыя з HTML-тэгі, што мы падышоў з'яўляюцца наступныя. Усе нашы HTML дакументаў пачаў з DOCTYPE HTML. Тады ў нас заўсёды ёсць HTML тэг. У нас ёсць галава і цела. І важна, што HTML-ёсць гэта свайго роду укладзенай структуры таму што гэта вельмі ясна. І тады становіцца ясна, калі мы трэба адкрыць і на самай справе блізкія метак. І мы заўсёды павінны зачыніць пазнакі, якія мы адкрылі. І тут у нас ёсць некаторыя віды рэчаў наперад, якія мы хочам мець. Такім чынам, мы маем, напрыклад, назву CS50. І тады мы на самай справе можна звязаць табліцы стыляў які вызначае, як мы стыль наш сайт. Гэта CSS. Мы збіраемся ісці па ім у Наступная пара слайдаў, а таксама. У целе, мы ставім некаторыя класы і ідэнтыфікатары. І як напамін, зноў жа, Ідэнтыфікатары ўнікальныя і класы могуць быць аднесены да некалькіх пунктах. І, што проста азначае, што мы можам выкарыстоўваць класы і ідэнтыфікатары у іншай structures-- Так, Напрыклад, у CSS файлаў або стылю sheets-- звярнуцца да канкрэтных элементаў і ў асноўным кажуць, што мы хочам, каб стыль або стварыць некаторы элемент у нейкай адмысловай выявай. І мы гаворым ім іх ідэнтыфікатары і класы. І мы можам таксама звярнуцца да розныя рэчы па тэгах, а таксама, але ідэнтыфікатары і класы проста даць нам некаторыя Універсальнасць і што канкрэтна мы хачу звярнуцца да. Так што прыклад. Мы можам, зноў жа, у межах файл CSS, дзе мы хачу, каб вызначыць некаторыя style-- так колеру, шрыфты, і да таго падобнае that-- мы можам вызначыць стыль для цела. Так што б вызначыць яго на ўвесь тэга цела. Але тады мы можам таксама вызначыць стыль для #title. І зноў, хэштэгу ставіцца да нашага ID і кропка ставіцца да нашага класу. І тады для .info, мы можна таксама ўсталяваць некаторыя атрыбуты. І зноў, калі мы вернемся, у нас былі Клас называецца інфармацыя і наша пасведчанне назву. І мы бачым, што мы называем ім #title і .info. АЎДЫТОРЫЯ: Вы хочаце сказаць, хэштэгу [? прыняць мяне? ?] МАРЫЯ ZLATKOVA: Выбачайце? АЎДЫТОРЫЯ: Вы хочаце сказаць, хэштэгу [? прыняць мяне? ?] МАРЫЯ ZLATKOVA: хэштэгу азначае ідэнтыфікатар, так #title ставіцца да таго, што элементы ёсць гэты ідэнтыфікатар, званы тытул. І тады кропка ставіцца да класа. Так .info ставіцца да гэтага элементу паколькі ён мае інфармацыі аб класе. Так. АЎДЫТОРЫЯ: Чаму вас вылучыць іх у HTML? Чаму вы кажаце, пэўныя рэчы Ідэнтыфікатары і некаторыя рэчы клас? МАРЫЯ ZLATKOVA: Гэта проста да you-- Ханна Блумбэрг: Паўтарыце пытанне. МАРЫЯ ZLATKOVA: О, прабачце. Чаму мы вылучаем пэўныя элементы як ідэнтыфікатары і іншыя элементы як класы? Гэта толькі таму, што сапраўды часта выбар дызайну. Гэта дае вам шмат Ўніверсальнасць у тым стане сказаць, што я хачу гэта пэўны элемент каб гэты ідэнтыфікатар, таму што яны хочуць каб зрабіць шмат рэчаў, з ім, і я толькі хачу, каб вызначыць стыль, пэўны стыль ці колер усё для гэтага элемента. І тое, як зрабіць, што проста даючы яму ID. І потым, калі я хачу, каб мець пара розных прадметаў маючы таго, што замест адбываецца і ўстаноўка their-- а не рабіць гэта з дапамогай тэг, таму што тэг будзе ўсталяваць вочка для ўсёй тэга кожны раз выкарыстоўваецца гэты тэг, Вы можаце ўсталяваць клас некалькіх элементаў. А потым проста адкрыць гэты клас і сказаць, Я хачу, каб распрацаваць Такі клас шлях. І зноў, клас можа быць некалькі розных прадметаў і ідэнтыфікатар павінен быць унікальным. Вялікія пытанні. Любыя іншыя пытанні? ОК, дзіўны. Зноў жа, гэта, як гэтыя селектары якія спасылаюцца на CSS, з хэштэгам, з пункту, або без нічога для прысваення стыль нейкі тэг, як цела. І тут у нас ёсць агульнае Сінтаксіс, як гэта робіцца. Каб паўтарыць некаторыя лепш практыкі для HTML і CSS, мы павінны, зноў жа, закрыць усе HTML-тэгі, якія мы адкрываем. І тое, што мы рэкамендавалі вам зрабіць для вашых канчатковых праектаў, а таксама для CS50 фінансаў, каб зрабіць Пераканайцеся, што ўсе вашыя HTML правярае. І гэта будзе зроблена з W3 валідатары. І тады тое, што мы зрабілі, і тое, што мы рэкамендуем гэта рабіць аддзяляе стыль, так CSS ад разметкі HTML. Таму ўсе, што ставіцца да таго, як Ваша старонка будзе выглядаць візуальна і як ён збіраецца быць зменены павінен ісці ў CSS дакумента. І тады ваша разметка кажучы, як усе у дачыненні адзін аднаго, HTML і і што павінна прайсці ўнутр Вашы HTML дакументы. Любыя пытанні? Ммм. АЎДЫТОРЫЯ: Што менавіта адбываецца на з праверкі старонкі калі мы пацверджання HTML-тое [неразборліва] стварыў? МАРЫЯ ZLATKOVA: Так што-думаю, што вы. Дык што ж адбываецца на старонцы з праверкай і чаму мы павінны гэта рабіць? У прынцыпе, мы павінны зрабіць што таму што шмат разоў, ваш браўзэр, калі вы не паспелі зачыніць тэг ці нешта падобнае, Ваш браўзэр па-ранейшаму будзе адлюстраваць старонку і, магчыма, усё яшчэ працуюць, але лепш практыка, каб пераканацца, што Вы, зноў жа, зачыненыя ўсе тэгі, што ўсе вашыя элементы так, што яны павінны быць, і ў асноўным, што гэта самая канвенцый, якія захаваны ў памяці. Гэта, зноў жа, толькі што вы павінны вучыцца, каб рабіць, у адрозненне ад таго sloppier код і да таго падобнае. Так. О, прабачце. Я думаў, вы былі падымаючы руку. АЎДЫТОРЫЯ: Не, я быў проста [неразборліва]. МАРЫЯ ZLATKOVA: ОК. АЎДЫТОРЫЯ: Дзякуй. МАРЫЯ ZLATKOVA: Вядома, дзякуй. Такім чынам, яшчэ раз, адпраўляючыся на тым, як інфармацыя перадаецца і мадэлі камунікацыі для перадачы інфармацыі. TCP / IP. TCP проста азначае перадач Пратакол кіравання і ІС ставіцца да інтэрнэт-пратаколу. І толькі ставіцца да спосаб дадзеныя перадаюцца. Калі ў нас ёсць некаторыя дадзеныя, якія трэба дастаўлены you-- так Вы робіце запыт на пэўны сервер. Напрыклад, калі мы спрабуюць атрымаць доступ да cs50.net, мы робім запыт да CS50-сервер і мы бачыць, што мы хочам атрымаць гэта свайго роду інфармацыі. І затым на аснове гэтага пратаколу пра тое, як дастаўляецца гэтая інфармацыя, сервер дае інфармацыю назад да нас, кліент. І тады мы можам глядзець інфармацыя для гэтай старонкі а затым выкарыстоўваць яго. Такім чынам перадачы гіпертэксту гэта проста яшчэ адзін пратакол або набор канвенцый, вызначае, як вэб-браўзэр і вэб-сервер павінны мець зносіны. І ўсё гэта пакласці разам, HTTP, зноў жа, проста вызначае, як вызначыў гэта гіпертэкставых у HTML, што мы працавалі яго, як гэта павінна быць дастаўлены да вас і як гэта дадзеныя, якія дастаўлены да вас становіцца для вас. І вось чаму, калі вы, хлопцы, памятайце, з класа, у нас было шмат запытаў і ў нас было шмат сінтаксісу для гэтых запытаў, што мы збіраюся перайсці на прама цяпер. Такім чынам, яшчэ раз, калі мы адпраўляем запыт да сервера, мы павінны вызначыць пару рэчаў. Такім чынам, мы павінны знайсці тып запыту, што мы ўсталёўваем. І зноў, у нас ёсць, напрыклад, GET з'яўляецца адным з відаў метаду што мы маем у нашай просьбе. І тады HTTP / 1.1 толькі пратакол, які мы выкарыстоўваем у цяперашні час. Вялікую частку часу, што адбываецца пратаколу, які мы выкарыстоўваем. Так што, калі ў вас ёсць пытанне так на віктарыне. Вось канвенцыі што ў нас так далёка. Зваротная касая рыса ставіцца да нейкай з рэчаў, якія мы просьбай. Затым гаспадар ўяўляе сабой, напрыклад, у гэтым так, што мы спрабуем ісці ў google.com. Так што гэта значэнне для гаспадара. Гэта тып запыту якія могуць быць адпраўленыя. І тады тып адказу, які мог накіроўваецца зноў, грунтуючыся на гэтым пратаколе, зноў, HTTP / 1.1. Так што гэта HTTP-версія зноў. 200 ОК гэта толькі код стану. І, што ОК гэта проста фраза на аснове гэтага кода стану. І тады Content-Type ставіцца да тыпу што вяртаецца да вас, што гэта для гэтай вэб-старонцы, што вы атрымліваеце і што ў вашым браўзэры можа аказаць пасля. І гэта тэкст / HTML. АЎДЫТОРЫЯ: Што азначае 1,1? МАРЫЯ ZLATKOVA: Гэта проста Версія of-- ой, што ж 1.1 ўвазе? Гэта проста версіі, HTTP версія пратаколу, які мы выкарыстоўваем. Вялікае пытанне. Іншыя пытанні? АЎДЫТОРЫЯ: Не маглі б вы падвесці вынікі Content-Type вельмі хутка? МАРЫЯ ZLATKOVA: Так што гэта тое, што сервер. тып information--, што тып змесціва былі пытанні. Так што быў тып Інфармацыя, якую Вы атрымаеце назад з сервера, тыпу дадзеныя, якія браўзэр можа затым аказаць, што вы выкарыстоўваеце. АЎДЫТОРЫЯ: Гэта тое, што гэта Пратакол кажу вам рабіць? МАРЫЯ ZLATKOVA: Выбачайце? АЎДЫТОРЫЯ: Гэта тое, што кажуць, што пратакол? МАРЫЯ ZLATKOVA: The protocol-- АЎДЫТОРЫЯ: --what Content-Type з'яўляецца або што- МАРЫЯ ZLATKOVA: Пратакол заснаваны on-- што пратакол кажу вам? Вось толькі шлях што гэтай інфармацыі быў дастаўлены да вас на аснове ад таго, якая з пратаколу Ці была гэтая інфармацыя атрымала пастаўляецца да вас. Ці мае гэта сэнс то? Ханна Блумбэрг: Вы можа думаць аб пратаколе а a-- Я думаю, прафесар Малая апісаў яго у класе, накшталт як a-- гэта як эквівалент чалавечага квитирования. Скажыце, як, эй, я запыт, і я ведае, як звяртацца HTTP версіі 1.1. І тады сервер кажа, О, добра, я-- і абодва існуюць. Я таксама ведаю, як мець справу з HTTP / 1.1. І я збіраюся даць Вы падтрымліваеце некаторы кантэнт. У гэтым выпадку, гэта будзе да тыпу тэксту / HTML. Так што гэта свайго роду проста спосаб з іх для communicating-- МАРЫЯ ZLATKOVA: Гэта проста якія пацвярджаюць, што вы і вынікаючы той жа Пратакол і што абодва кліент і так server-- Ваш браўзэр і server-- накшталт ведаю, што ты пра што кажа і ёсць Канвенцыя для праходжання ў дадзеных. АЎДЫТОРЫЯ: Так Content-Type прайшоў пробы Тып зместу тэксту / html-- гэта асобная частка таго ж паведамлення? Ці гэта частка скажам, 200? Ці кажа ім, што 200 ці is-- МАРЫЯ ZLATKOVA: 200 кажа, што ўсё гэта прайшло нармальна. І тады тып змесціва роду Асобная частка таго ж паведамлення, і заявіўшы, што рэч, якую я Вяртаецца мае гэты тып тэксту / HTML. Гэта проста даваць больш інфармацыі. Ёсць што дадаць? ДОБРА. Любыя іншыя пытанні па гэтай нагоды? Высокі. Такім чынам, некаторыя іншыя HTTP статуты, якія мы маглі б атрымаць у дадатак да 200 OK, тыя, што мы бачылі, можа быць, калі- магчыма, шмат 403 і 404. Так 404, калі вы спрабуеце Доступ тое, што не існуе. Так, напрыклад, у вашым CS50 Фінансы psets, калі вы былі рэндэрынгу quote.html і вы не павінны файл, але замест гэтага вы былі quote.php, што прывядзе да 404 Not Found таму што файл не можа існаваць. Для 403 забаронена, што ставіцца да паўнамоцтваў. Так што, калі які-небудзь файл не даступны для чытання Свет, вы можаце атрымаць 403 вярнуўся. Некаторыя іншыя, якія вы можаце get-- 301, пераехаў на сталае жыхарства; 302, Знойдзена; 304, мадыфікаваны; 400, Bad Request; а затым Унутраная памылка сервера для 500 і 503, Служба недаступная. Так. АЎДЫТОРЫЯ: ці будзем мы чакаць запамінаць ўсе гэтыя статуты? МАРЫЯ ZLATKOVA: Я б ім на шпаргалку. [Смех] АЎДЫТОРЫЯ: Мы, як чакаецца, ведаю, што выклікае кожны? МАРЫЯ ZLATKOVA: Ці з'яўляюцца яны? Ханна Блумбэрг: Для тех, якія мы запусціць into-- таму пытанне was-- МАРЫЯ ZLATKOVA: Ці з'яўляюцца яны, як чакаецца, ведаю, што кожны з іх статусу Коды могуць быць выкліканыя? Такім чынам, для тых, якія мы выкарыстоўвалі і пабег у, я б сказаў, так. Такім чынам, мы вызначана бачылі 200 ОК і лекцыі яго ў psets. Мы бачылі 403, 404. Для астатніх? Ханна Блумбэрг: Я б кажуць 500 здаецца сумленнай гульні. МАРЫЯ ZLATKOVA: 500, так. Ханна Блумбэрг: Так. Проста агульны сэнс што выклікае іх. А таксама проста гэта Імёны, вы можаце выгляд як зрабіць абгрунтаванае меркаванне як да чаго на самай справе выклікала іх. Напрыклад, рух пастаянна, верагодна, файл быў перамешчаны назаўжды. АЎДЫТОРЫЯ: Але на папярэдні экзамен, было так як вы чакаеце, каб мы адказаць? Ханна Блумбэрг: Гэта варта нуль ачкоў. Пытанне аб 418 на чайніку тэхнічна статус HTTP, але гэта каштавала нуль ачкоў. Відавочна, што вы не Чакаецца, ведаю іх. АЎДЫТОРЫЯ: Гэта сапраўдны? Ханна Блумбэрг: Гэта сапраўдны Адзін з іх, але гэта нічога не значыць. Гэта проста жарт. Інтэрнэт людзі вясёлыя. МАРЫЯ ZLATKOVA: Вялікія пытанні, хлопцы. Любыя іншыя пытанні? АЎДЫТОРЫЯ: Што ўнутраная памылка сервера? МАРЫЯ ZLATKOVA: Унутраная Памылка сервера толькі азначае, што вы былі не ў стане мець зносіны з серверам па некаторых прычынах. Так што гэта не абавязкова тое, што мае дачыненне да з кліентам ці нешта падобнае. Я не ведаю ні аднаго канкрэтнага прыкладу што мы перайшлі, каб растлумачыць, але так. Ханна Блумбэрг: Вядома. Так, напрыклад, як давайце што вы працавалі на калажаў і сервер Google пайшоў на некаторыя Прычына, адключэнне электрычнасці, скажам так. Гэта было б ўнутраны сервер памылка ці нейкі of-- падабаецца вам не хацеў бы атрымаць адказ назад. МАРЫЯ ZLATKOVA: Так. Гэта проста, калі вы не ў стане мець зносіны з серверам для нейкай прычыне, таму што з яго ідзе ўніз ці якой-небудзь іншай прычыне. Так скакаць у PHP. PHP, у адрозненне ад HTML, з'яўляецца мова праграмавання. І мы пачалі выкарыстоўваць яго, таму што гэта вельмі карысна для вэб-распрацоўкі. Мы ўпершыню выкарыстаў яго ў CS50 фінансаў. І гэта ў асноўным дапамагае нам прынесці разам гэта разметкі, дызайн, і як мы на самай справе выкарыстаць інфармацыю для адлюстравання рэчы на ​​вэб-старонцы. Так PHP само па сабе азначае PHP Препроцессор гіпертэксту, так што гэта рэкурсіўная backnorym сам па сабе. І адкрыццё тэгі для PHP мы левая і правая стрэлкі з пытальнікамі і PHP. Такім чынам, мы ўжо бачылі кучу яго. Зараз, мы толькі збіраемся пераходзіць некаторыя з асноўных рэчаў, пра яго. Так з PHP, зменнай імёны якіх пачынаюцца з знака даляра. Мы не паказаць, зноў жа, пераменная тыпу больш. Гэтак жа, як мы зрабілі з C, мы не павінны гэтага рабіць. Мы можам зрабіць кучу розных матэрыял з зменнымі. Мы можам паставіць іх разам шляхам аб'яднання іх з кропкавай натацыі, якая мы не маглі б зрабіць у C зноў. Зноў жа, у нас ёсць трохі больш гнуткасці з PHP ва ўмовах зменных. Зноў жа, мы не маем асноўную функцыю. І PHP інтэрпрэтуецца у адрозненне ад кампіляцыі Такім чынам, як жа зрабіць, мы для файлаў C., мы не павінны рабіць, што для PHP. Але, хутчэй за, так, што мова выконваецца сама па сабе, яна інтэрпрэтуецца. А потым слаба тыпізаванай проста азначае, што мы ня трэба паказваць зменную тып і тыпы зменных маюцца на ўвазе падчас выканання. АЎДЫТОРЫЯ: Але тое, што зрабіў табе маю на ўвазе кропка аб'яднання? МАРЫЯ ZLATKOVA: Вядома. Калі мы хочам навесці together-- так што калі ў нас былі некаторыя зменную, меў значэнне 3 і ў нас быў іншы пераменная, меў значэнне радкі, мы маглі б зменныя разам паставіўшы кропку паміж імі і аб'яднання іх. Ці мы маглі б стварыць Пераменная называецца імя і паклаў яго разам аб'яднанне двух радкоў. Так што, калі ў нас быў двайны радок у каціроўкі і ставім кропку пасля яго, і тады мы мелі іншую радок, што будзе стварыць радок у цэлым. АЎДЫТОРЫЯ: ОК. МАРЫЯ ЛАТВІЯ: Быў, што ясна? АЎДЫТОРЫЯ: Так. МАРЫЯ ZLATKOVA: ОК. Так. АЎДЫТОРЫЯ: Калі вы кажаце, інтэрпрэтаваць, што складзены, Вы кажаце пра вас не павінны быць таксама канкрэтныя, калі Што тычыцца PHP ў параўнанні з C? МАРЫЯ ZLATKOVA: Калі мы кажам, інтэрпрэтуецца як супрацьлегласць складзены, што мы маем на ўвазе? Дык гэта значыць, што мы не павінны выкананыя файлы для запуску PHP. Гэта азначае, што ён працуе, як яна ідзе. Ці мае гэта сэнс? Крыху больш. Ханна Блумбэрг: Такім чынам, вы можа думаць перакладчыка а іншай праграмай, якая адказвае для пераходу па радках праз PHP а на самай справе яго выканання, у адрозненне да складання усё гэта ўніз ў двайковы. Гэта на самай справе не азначае нічога аб тым, як канкрэтныя, мы павінны быць. Мы па-ранейшаму павінны быць дакладнымі, і ня забыліся коскі, і пераканайцеся, што ў вас ёсць знак даляра, і да таго падобнае. Добры пытанне. МАРЫЯ ZLATKOVA: Так. Так парадкова, а у адрозненне ад C з файламі, мы павінны зрабіць усё фінал перш, чым мы на самай справе можам запусціць яго. Гэта галоўнае адрозненне. Але, зноў жа, мы не можам сапраўды менш спецыфічныя. Так масівы ў PHP ўяўляюць на самай справе загадаў карту. Так масівы асацыіраваных значэнняў клавішах. Два спосабу абвясціць Масіў, на аснове гэтага сінтаксісу, мы можам быць больш відавочным кажучы ў нас ёсць масіў і ў нас ёсць гэты key1, які адлюстроўваецца гэта значение1, ключ2, які адлюстроўвае значение2. Ці мы можам проста стварыць масіў які змяшчае сам значэння і затым клавішы разумець у шляху. Любыя пытанні па гэтай нагоды? Аўдыторыя: што б ключы быць у другім прыкладзе? 0, 1, 2, 3? МАРЫЯ ZLATKOVA: Напрыклад, гэта проста ключы ў гэта не абавязкова зрабіць розніцу. Яны проста вызначыць, як вы можаце выкарыстоўваць значэння ўнутры яго. Так што, калі ў нас быў Еогеасп пятля ў PHP, што б дазваляюць нам прайсці праз усе значэння, мы можам прайсці праз усе значэння, нават калі б мы мелі ці не вызначылі пэўны ключ у сайта папярэдняя сінтаксіс. Такім чынам, нават з такога роду масіва, мы маглі б яшчэ ёсць цыкл па кожнаму элементу які праходзіць праз кожны значэнняў у ключы масіва. Так сінтаксісе Еогеасп цыкл, мы пачынаем з масівам. Гэтая пераменная $ обр наша бягучая масіў што мы вызначылі ў папярэднім слайдзе ў якасці значэння, якія літаральна ідзе праз кожнае з значэнняў, незалежна ад таго, у нас быў ключ ці не. І тады мы можам зрабіць што-то з значэнне ўнутры цыкл па кожнаму элементу. Такім чынам, яшчэ раз, калі б мы мелі масіў вось так вось created-- таму ў нас ёсць ключ Foo і кошту бар, ключ Baz і кошт qux-- мы можам мець цыкл па кожнаму элементу, што праходзіць праз масіў як значэнне ключа а затым зрабіць нешта з ключом, і / або значэнне. Але мы не заўсёды абавязкова павінны мець Еогеасп завесы, што праходзіць праз масіў як ключавы карце да кошту. Мы можам пайсці праз Масіў цыкл па кожнаму элементу ў якасці значэння. Ханна Блумбэрг: І я думаю, , Мэтай якіх было на ваша пытанне, тое, што няяўна індэкс? АЎДЫТОРЫЯ: Свайго роду. МАРЫЯ ZLATKOVA: Ой. Ханна Блумбэрг: Так, так. Так у асноўным, калі вы не пакажаце ключ, ён будзе 01. МАРЫЯ ZLATKOVA: Так. Гэтак жа, як з C, гэта нуль індэксуецца, калі вы не пакажаце ключ. АЎДЫТОРЫЯ: Выбачайце. Не маглі б вы паспрабуйце гаварыць трохі гучней? У мяне трохі Бяда слыху ўсё. МАРЫЯ ZLATKOVA: Мне так шкада. Так, вядома. Так што вы хочаце мне перайсці на гэты раз? Або this-- АЎДЫТОРЫЯ: Так на папярэдняй slide-- калі вы маглі б проста вярнуцца на працягу адной секунды. МАРЫЯ ZLATKOVA: Вядома, шкада. АЎДЫТОРЫЯ: Такім чынам, другі Масіў тут не здаецца, маюць значэнне для ключа, роду [? прычынна-следчая сувязь. ?] МАРЫЯ ZLATKOVA: Праўда, праўда. АЎДЫТОРЫЯ: Так як гэта працуе калі вы кажаце, што гэта ўсё ці нічога. Для мяне, які выглядае як а [? Foo?] Ўжо. МАРЫЯ ZLATKOVA: Так, так. Такім чынам, яшчэ раз, гэта замовіць карту ў гэтым сэнсе што варта разумець, Напрыклад, паказальнікі Тут можна разумець як 0, 1, 2, 3. Зноў жа, гэта тыя, якія маюць Індэксы наш эквівалент мець ключы, адлюстравання на каштоўнасцяў. Так што, калі наш ключ быў 0-- прабачце. Ханна Блумбэрг: Не, там мел тут. Гэта на самай справе вельмі прыемна. МАРЫЯ ZLATKOVA: Гэта выдатна. ДОБРА. Такім чынам, яшчэ раз, $ обр 0 будзе ключ да значэння 1. 0 будзе ключом да значэння 1. АЎДЫТОРЫЯ: Я прашу прабачэння. Гэта нябачная. Ханна Блумбэрг: Добра, па дулю. Мел была дрэнная ідэя. Бяру свае словы назад. Вы можаце думаць пра ключы а 0 адлюстроўваецца ў значэнне 1. МАРЫЯ ZLATKOVA: Так. Такім чынам, гэта 0, гэта 1, 2, 3. Яны могуць быць вашы ключы. Вы можаце думаць пра іх as-- так. Такім чынам, замест таго, ключах, яны накшталт як зразумеў, індэксы, пачынаючы з 0. Мел не дапаможа. Так. АЎДЫТОРЫЯ: Для цыкл па кожнаму элементу, калі б мы хацелі, каб праглядзець, як каштоўнасць, гэта было б проста аўтаматычна індэкс 0? МАРЫЯ ZLATKOVA: Так. Было б прайсці кожнае з значэнняў. АЎДЫТОРЫЯ: [неразборліва], як 0 або, што б проста зрабіць 0? МАРЫЯ ZLATKOVA: Вы б сказаць, як знак даляра, а затым некаторыя імя зменнай, значэнне. АЎДЫТОРЫЯ: [неразборліва]. МАРЫЯ ZLATKOVA: Выбачайце? АЎДЫТОРЫЯ: На жаль, я проста спрабую ўспомніць. Як бы вы, што калі вы можаце зрабіць гэта аўтаматычна індэксацыі проста 0 з? МАРЫЯ ZLATKOVA: Так як бы вы зрабіць гэта калі ў вас не было канкрэтных імёнаў ключоў? АЎДЫТОРЫЯ: Так. МАРЫЯ ZLATKOVA: Вы б проста define-- проста сказаць сабе, як які-то імя. Так што ў вашым psets, вы, хлопцы, маглі б памятаеце Еогеасп $ шэраг як $ радкоў, мы стварылі гэты OURSELF $ шэраг кажучы мы хочам, каб прайсці праз шэраг, як $ шэрагаў. Нават калі ў нас не было гэта відавочна $ шэрагі вызначаны, мы маглі б проста пайсці і кажуць, што гэта можа быць наш ключ, і проста прайсці праз кожнае з значэнняў. АЎДЫТОРЫЯ: Так значэнне новай зменнай мы ствараем для захоўвання [неразборліва]? МАРЫЯ ZLATKOVA: Так што гэта не па сутнасці гэта новая пераменная. Гэта зменная, якая ставіцца да ўнутры масіва да кожнага з іх. Ханна Блумбэрг: Гэта новая пераменная імя. МАРЫЯ ZLATKOVA: Так, гэта новая пераменная імя, але гэта не inherently-- так. Гэта проста новая пераменная што вы можаце зрабіць гэта. Такім чынам, як мы зрабілі $ Веславаць, як $ радкоў, радкоў быў новую зменную імя, што мы можа стварыць у нашай цыкл па кожнаму элементу. Гэта не павінен існаваць да да гэтага. АЎДЫТОРЫЯ: Не маглі б вы прайсці праз Логіка для кожнага, выкарыстоўваючы прыклад ёсць? МАРЫЯ ZLATKOVA: Ммм. О, прабачце. Вось прыклад. Вядома. Такім чынам, для кожнага array-- так гэта азначае, што пайсці на гэты масіў як ключ value--, што адбываецца прайсці праз гэты масіў і спачатку пайсці і атрымаць Foo, то Ключ Foo і бар значэнне. І тады на другім ітэрацыя цыкл, ён збіраецца прайсці і прыняць ключ Баз і значэнне QUX. І тады вы можаце зрабіць што-то з любы з іх або абодва з іх. АЎДЫТОРЫЯ: Так ідэя якія маюць ключавыя кропкі да значэння, што вы ў канчатковым выніку доступу? МАРЫЯ ZLATKOVA: Якая ідэя мець ключ, які паказвае на шануеце? Гэта проста яшчэ адзін канвенцыя, іншы спосаб ісці па масіву і быць у стане атрымаць доступ да альбо ключ ці значэнне або абодва, і выкарыстоўваць іх. АЎДЫТОРЫЯ: Якая роля для замовіць што Еогеасп працуе ў? Так што, калі мы павінны былі дадаць элементы ў масіў пазней, будзе тых, быць першымі называецца ў масіве Еогеасп, ці гэта будзе пазней? МАРЫЯ ZLATKOVA: Так што парадак, што Еогеасп цыкл праходзіць праз масіў у? Ён праходзіць праз першы элемент апошняга элемента, да апошняга дададзенага элемента. Калі вы дадаеце элементы ў далейшым, яны будуць быць accessed-- першыя элементы будуць Доступ у якасці першага Элементы масіва, і тады вы б прайсці праз кожны з элементы як-то ў ordered-- ня загадаў, але так, што яны былі ўведзеныя ў масіве. АЎДЫТОРЫЯ: Так новыя элементы дададзеныя пазней? Так яны added-- яны буду апошнія, у [? ітэрацыі. ?] МАРЫЯ ZLATKOVA: Новыя элементы can-- у асноўным, калі новыя элементы дадаюцца, яны дадаюцца ў канец масіва? АЎДЫТОРЫЯ: Так. МАРЫЯ ZLATKOVA: Я веру ў гэта. Так. А потым з цыкл па кожнаму элементу, пасля таго як вы дадалі новыя элементы і вы ідзяце праз іх, новыя элементы будуць быць accessed-- новага элемента, калі гэта дададзены апошнім, ён будзе даступны ў мінулым. АЎДЫТОРЫЯ: Ці можаце вы проста даць прыклад пра нешта, што б [неразборліва] з чым-то са значэннем як [неразборліва] або кошту, падабаецца, як вы адфарматаваць гэта? МАРЫЯ ZLATKOVA: Вядома. Ці магу я даць прыклад таго, што мы хацелі б зрабіць з каштоўнасць? Так што вы, хлопцы, можаце быць знаёмыя з з'яўляецца тое, што мы пайшлі праз масіў і ў асноўным друкуюцца кожны з элементаў, напрыклад, як частка спарадкаваны спіс або што-то, што. Ці мае гэта сэнс ці мы хочам, мэтай якіх АЎДЫТОРЫЯ: Ці можам мы раздрукаваць гэтыя значэння па-за домам? МАРЫЯ ZLATKOVA: Так, мы маглі б друкаваць і то ў асноўным таму, што значэнне $ у што канкрэтнае значэнне, мы б друк значэнне ўнутры яго. Так што, калі мы былі ў нашай першай ітэрацыі з яго, і мы надрукаваныя $ значэнне, мы б друкаваць бар. АЎДЫТОРЫЯ: Ёсць таксама для завесы ў PHP або проста Foreach завесы? МАРЫЯ ZLATKOVA: Там гэта Таксама для завес ў PHP. І іх логіка ў асноўным гэтак жа, як тое, што вы былі раней. АЎДЫТОРЫЯ: Такім чынам, яе значэнне роўна нулю. МАРЫЯ ZLATKOVA: Гэта як тое ж самае. Так. АЎДЫТОРЫЯ: Я проста хачу, каб спытаць. Таму, калі вы аб'яўляеце Масіў, вам не трэба сказаць, што памер ён збіраецца быць, што азначае, што вы можаце проста дадаць і забраць элементы [неразборліва]. МАРЫЯ ZLATKOVA: Так. Так. Дакладна. Калі мы аб'яўляем масіў, мы не трэба казаць, што памер гэта, такім чынам, мы можам проста дадаць элементы на гэта пазней. Яшчэ пытанні? Дык чаго PHP і HTML разам, тое, што мы seen-- добра, Напрыклад, у гэтым прыкладзе, мы маем HTML-форма, якая мае полі ўводу. І поле ўводу проста назва і то ён мае кнопку Адправіць. І пры націску Адаслаць Кнопка, на наш hello.php файла, паколькі метад для формы атрымаць, мы можам атрымаць доступ усё, што знаходзіцца на імя гэтым атрымаць глабальную зменную, якая is-- сінтаксіс гэта $ _GET. І тады мы можам атрымаць доступ незалежна ад карыстацкі ўвод у гэтай форме для імя паказаўшы імя гэтага поля. Любыя іншыя пытанні або любы пытанні па гэтым канкрэтным прыкладзе? АЎДЫТОРЫЯ: Дзе PHP? МАРЫЯ ZLATKOVA: Тут. Так што гэта наш які адкрывае тэга для PHP. АЎДЫТОРЫЯ: Так, правільна. МАРЫЯ ZLATKOVA: Так. Ханна Блумбэрг? Аб: = гэта скарачэнне для гэтага з'яўляецца PHP і проста рэха. АЎДЫТОРЫЯ: Ой. МАРЫЯ ZLATKOVA: Так, прабачце. Я павінен быў зрабіць, што ясна. Ханна Блумбэрг: Друк. МАРЫЯ ZLATKOVA: Гэта проста функцыя што дазваляе надрукаваць што-небудзь. Вялікае пытанне. Так going-- так. АЎДЫТОРЫЯ: Ці ёсць будзе дастаткова трохі ручнога кадавання РНР і HTML на віктарыне 1? МАРЫЯ ZLATKOVA: Там можа быць ладная колькасць інтэрпрэтацыі РНР і HTML, не абавязкова як велізарная колькасць кадавання, калі вы, магчыма, прыйдзецца напісаць цыкл па кожнаму элементу, хоць, для завесы. Любы з завес, якія мы покрыва тут сумленная гульня. І гэта ў асноўным гэта. Ханна Блумбэрг: Я быў бы гатовы. Такім жа чынам, што мы прасілі вас напісаць кучу функцый C на віктарыне 0, Я б гатовы зрабіць тое ж самае ў PHP і JavaScript. МАРЫЯ ZLATKOVA: Так. Ханна Блумбэрг: Я б сказаў, little-- як мы не зробіць вас напісаць велізарны HTML- старонка проста, таму што гэта трохі стомна, але вы, магчыма, часткі. Гэта зусім справядлівая гульня. Як невялікі HTML старонкі, цалкам справядлівым. АЎДЫТОРЫЯ: ОК. Як наконт у JavaScript, а? Ханна Блумбэрг: Так. Справядлівая гульня ў JavaScript. МАРЫЯ ZLATKOVA: Так. Гэта цалкам справядлівая гульня. Ханна Блумбэрг: Мы атрымаем да таго, што ў падобных 10 хвілін. МАРЫЯ ZLATKOVA: SQL, зноў жа, Structured Query Language. Гэта ў асноўным дазваляе кіраваць дадзенымі у рэляцыйнай базы дадзеных кіравання Сістэма. Гэта проста азначае, у асноўным што ў нас ёсць дзе-то захоўваць некаторыя дадзеныя, якія мы маглі б выкарыстоўваць у сайце або ў іншым выглядзе. І тады ў нас ёсць запыты, каб атрымаць Інфармацыя з нашай базы дадзеных, або ўставіць у іх інфармацыю. Шмат агульнага ones-- UPDATE, INSERT, SELECT і DELETE. Такім чынам, для UPDATE, гэта сінтаксіс для абнаўлення дадзеных у базе дадзеных. Абнаўленне гэтай табліцы пад назвай Табліца кажучы SET, мы можам усталяваць некаторыя значэння ва ўсіх Радкі ў роўнай чагосьці яшчэ. Такім чынам, мы можам таксама пазначыць некаторыя канкрэтныя Запісы, якія мы хочам змяніць і што можа быць з дапамогай ДЗЕ. І мы можам паказаць, што мы хочам, каб змяніць некалькі радкоў, дзе дом для, калі б мы мелі табліцу студэнтаў і ўсе студэнты мелі дом, так што мы толькі змяніць некаторыя значэння дзе дом роўны кур'ерам, напрыклад. Для INSERT, мы можам ўставіць пэўныя значэння ў табліцу. Так INSERT INTO табліцы, а затым значэння, а затым у дужках мы паказваем які шануе вы хочаце ўставіць. Так INSERT ў табліцу, col1 і col2, значэнне val1 і val2. Так што гэта ўстаўляе ў асноўным новы радок у табліца, якая змяшчае значэння 1 і 2 пад калонамі 1 і 2. А потым мы збіраемся перайсці на хуткі прыклад таго, як гэта выглядае як у нашай базе дадзеных няшмат. Але гэты апошні запыт, які я думаю, што мы збіраемся перайсці, ВЫБАР, ён проста дазваляе нам для выбару дадзеных з табліцы каб, магчыма, выкарыстоўваць яго пасля. І тое, як мы робім гэта, мы проста захоўваць яго ў якой-небудзь зменнай. І тады, магчыма, мы можам выкарыстоўваць яго зноў. Так ВЫБАР зорка азначае выбраць усе. Гэта проста скарачэнне для выбару ўсіх. АД стол, дзе мы шукаем для некаторых канкрэтных умоў, так дзе калонка роўная Што, напрыклад. Калі мы проста хацелі, каб выбраць ўсё з-за стала, гэта проста выбірае ўсе слупкі і ўсе радкі табліцы. І тады выдаліць з табліцы ДЗЕ калонка роўная тое, гэта толькі выдаляе некаторыя веславаць з нашага стала дзе ў нас ёсць некаторыя спецыфічныя ўмовы. У гэтым выпадку ўмовы з'яўляюцца калонкі роўная сёе-тое. Так што проста невялікі прыклад гэтага. Калі ў нас ёсць гэтая столік прама тут, і мы устаўце яго ў табліцу, гэтыя значэнні, што б ўставіць новы радок. І калі б мы мелі аўтаматычнае прырашчэнне, гэта будзе проста павялічваць наш ID ад 0 да 1 да 2. Калі мы абралі усё са студэнтаў, яго проста вяртае ўсе палі і ўсе радкі. Дзе больш за год чым або роўна 2016, што толькі вернецца Ханна і я. І потым, калі мы толькі што абралі год ID і год ад студэнтаў дзе дом Кабот Дом, які будзе, зноў жа, вярнуцца Ханна і я. Тады, калі мы выдалілі са студэнтаў дзе імя роўна Адзежа, што б выдаліць усю радок. І потым, калі мы ўсталёўваем Імя, UPDATE студэнты SET імя роўная Daven ДЗЕ дом роўны Кабот Дом, які збіраецца ісці да гэтыя радкі, а затым змяніць імя. А потым некалькі тыпаў дадзеных SQL з'яўляюцца ЗНАК, VARCHAR, INT і FLOAT. Гэта сумленная гульня. Я б зноў і пераканайцеся, што вы ведаеце, і мець іх на шпаргалцы, што кожны з гэтых персанажаў былі выкарыстаныя для тое, што Вы выкарыстоўвалі іх на вашых psets, і пераканайцеся, што вы знаёмыя і камфортна з таго, каб выбраць з розных тыпаў дадзеных у вашым PSET. Так. АЎДЫТОРЫЯ: Што было тое, што табліца захоўваецца? Так, дзе гэтая табліца захоўваецца? МАРЫЯ ZLATKOVA: Ну, Прама зараз, гэта не захоўваецца. Ва ўсякім выпадку, дзе гэтая табліца захоўваецца? Але ён можа быць захаваны ў базе дадзеных SQL ст. АЎДЫТОРЫЯ: А дзе гэта база дадзеных SQL? У кампутары, у Інтэрнэце дзе сервер? МАРЫЯ ZLATKOVA: Гэта можа быць колькасць розных рэчаў. Ханна Блумбэрг: Мы спалучаная з SQL табліцы ў асноўным з PhpMyAdmin. Такім чынам, мы маглі б спытаць сервер захоўваць іх для нас. Мы маглі б захоўваць іх на ўласным кампутары. МАРЫЯ ZLATKOVA: Гэта залежыць толькі ад як вы хочаце, каб зрабіць гэта для сябе. Але мы былі захоўвання ім, як ужо згадвалася Ханна, на PhpMyAdmin, які знаходзіцца ў сетцы. А потым, як мы выкарыстоўваем PHP і SQL, мы захоўваем яго у нейкай зменнай тое, што мы запытваюцца. Так што, калі мы Вылучыць усё гісторыі дзе user_id роўная ідэнтыфікатар сесіі, што б выбраць усе радкі для канкрэтнага чалавека, які рэгіструецца ў з гісторыі стол і сартаваць іх у шэрагі. Крутая рэч, каб ведаць, што функцыі запыту CS50 ў абараняе ад тэгаў SQL-ін'екцыі. Гэта проста азначае, што ён робіць, што ўваход, які ўведзены правільна і што чалавек, які уступае ўвод не спрабуе ўвесці некаторыя шкоднасныя код альбо выдаліць нашы табліцы або выдаліць усе ўнутры нашай базе. Хуткі агляд Мадэль мадэль View Controller, гэта проста спосаб арганізацыі і думаць пра код. Гэта зноў жа, дызайн парадыгма. Тое, што гэта азначае, што мы can-- і гэта добрая практыка для падзелу розных частак наш код і тое, што яны кантраляваць у гэтых трох парадыгмаў. Такім чынам, наш погляд найбольш часта нашы шаблоны, наша разметка, шлях што мы ўсталёўваем, як наш код выглядае. Гэта ў асноўным нашы CSS-файлы і так што мы вызначылі дызайн нашага кода, у асноўным. Наш кантролер ў асноўным тое, што мы рабілі з PHP файлаў. Такім чынам, яшчэ раз, працуючы з Інфармацыя, якую мы маем і вызначэння, як, што інфармацыя выкарыстоўваецца, і перадае гэтую інфармацыю альбо на прадстаўленні або мадэлі. І мадэль, так, што мы былі карыстаецеся была наша база, так дзе наша інфармацыя захоўвацца такім чынам, ён мае дзесьці жыць, і любы з код, які адносіцца да спосабу што мы атрымліваем гэтую інфармацыю або так, што мы абнаўляем гэтую інфармацыю. Такім чынам, у мадэлі MVC, HTTP запыты накіроўваюцца на вэб-серверы. Затым кантролер інтэрпрэтуе запыт ад карыстальніка і затым правярае дадзеныя, уведзеныя карыстачом. Гэта неабавязкова, што мы маем кантролер мець зносіны з мадэллю, так што-то як нашай базе ці некаторыя іншыя функцыянальныя што перадае інфармацыю. І, нарэшце, кантролер перадае інфармацыю на погляд такім чынам, што ён можа быць аказвалі і што ён можа становяцца бачнымі любой асобе доступ да вэб-старонцы. Любыя пытанні? Высокі. Такім чынам, яшчэ раз, мадэль, яго функцыя, зноў жа, гэта пастаяннага захоўвання інфармацыі, кіравання і арганізацыі дадзеных. І тое, што мы бачылі да гэтага далёка база дадзеных MySQL і любыя файлы дадзеных, якія могуць выкарыстоўваць. Паглядзець, прэзентацыя інфармацыі карыстальнік, карыстацкі інтэрфейс, або карыстацкі інтэрфейс. А прыкладам з'яўляецца HTML. І тады мы маглі б мець мінімальны PHP. Такім чынам, цыкл, які перабірае у параўнанні з дадзенымі, якія раздрукоўваюцца з'яўляецца часткай гледжання, як супрацьлегласць да кантролер. І тады многія з нашых PHP файлаў трапляюць у катэгорыю кантролера. Гэта проста апрацоўвае запыты карыстальнікаў і атрымлівае інфармацыю ад мадэлі. Скачкі ў дакумент Мадэль аб'екта, гэта толькі ставіцца да таго, HTML дакументы арганізаваны. І яны арганізаваны ў выглядзе дрэва Структура, што мае іерархію. Так што, калі ў нас ёсць доступ да [неразборліва] прадстаўленне дакумента, мы можам працаваць з дакументам, як мы маніпуляваць аб'ектамі ў прынцыпе. І зрабіць гэта трохі ясней, калі у нас ёсць шмат нашых розныя пазнакі адказаць да розных маршрутах у нашым дрэве. І тады для гэтага прыкладу, мы ёсць стартавы вузел дакумента. Такім чынам, мы маем, наш HTML-вузел што распадаецца на галаве і целе. Кіраўнік мае назву, а затым Назва змяшчае прывітанне, свет. І наша цела ўтрымлівае толькі прывітанне, свет, а таксама. Дык якія-небудзь пытанні па любой з рэчы, якія мы разгледзелі да гэтага часу? А калі не, Ханна ўзяць на сябе з JavaScript. Высокі. Ханна Блумбэрг: ОК, крута. Калі нешта здарыцца з PHP або HTML, або любы матэрыял, Марыя, пакрытай, мы заўсёды можам прыпыніць. Мы робім лепш на зноў, настолькі дзіўным. І толькі, каб вярнуцца вельмі хутка, каб гэта, калі вы паглядзіце на кожны Экзамен мінулага года, гэта прыходзіць either-- тут некаторыя HTML, каб гэтую дыяграму. Ці вось гэтая схема, зрабіць некаторыя HTML, так вызначана, што практыка. І тое гэта адзін гарантаваны Пытанне, які вы можаце атрымаць правы. Прахладны. Такім чынам, давайце пагаворым аб JavaScript і як гэта трохі адрозніваецца ад моў, такіх як PHP і З дзвюх мовах, якія мы бачылі загадзя. Так нумар адзін, гэта слаба тыпізаванай. Гэта, як PHP, але ў адрозненне ад С. Гэта інтэрпрэтаваная мова. Зноў жа, гэта, як PHP, у адрозненне ад С і гэта збіраецца, каб дазволіць нам use-- яго працуе вельмі добра з вэб-старонак. Гэта адбываецца, каб дазволіць нам маніпуляваць змест і як ён выглядае і што ён робіць. Мы збіраемся, каб убачыць крыху Ajax. Гэта дазваляе нам мець зносіны асінхронна з розных сервераў і атрымаць інфармацыю. І гэта тое, што сапраўды аддзяляе ад JavaScript PHP і C з'яўляецца тое, што на баку кліента. Абодва PHP і З як правіла, на баку сервера. Па большай частцы, і амаль цалкам, што мы бачылі, па меншай меры, у гэты клас, JavaScript дзейнічае на баку кліента, а гэта азначае, што браўзэр на самай справе адказнасць за яе запуску. А гэта значыць, што мы не трэба ўзаемадзейнічаць з серверам. Дык гэта азначае, што можа быць нашмат хутчэй, таму што гэта на самай справе проста гэта хром, гэта Safari, Firefox, гэта, усё, што вам выкарыстоўваць на самай справе працуе ваш JavaScript. АЎДЫТОРЫЯ: Што азначае асінхронны? Ханна Блумбэрг: Ах, што зусім асінхронна на ўвазе? Вялікае пытанне. Асінхронны азначае: добра, ўтрыманне ў якіх мы выкарыстоўваем гэта, добра, мы ствараюць вэб-старонкі і мы павінны атрымаць некаторую інфармацыю. Так на прыкладзе калажаў, некаторыя звесткі, якія мы маглі б гэта загалоўкі артыкулаў. Цяпер мы could-- адзін варыянт , Каб рабіць гэта сінхронна і гэта азначае, што давайце спыніць, ідзі артыкул, атрымаць артыкул спіну, а затым аказваць, але гэта было б вельмі павольна. Гэта было б дрэнны вопыт карыстальніка таму што вы проста сядзець там чакае нешта адказаць. Асінхронны азначае, што мы Мы працягваем ісці аб нашым бізнэсе, аказанне старонку, і мы вышлем запыт ад Гэта накшталт збіраецца адбудзецца ў фонавым рэжыме. Я думаю, што мы выкарыстоўваем прыклад у Лекцыя выкліку Адзежа і кажуць, эй, вы можаце шукаць гэта на для мяне, і вярнуцца да мяне, у адрозненне ад проста мяне чакання на тэлефоне. Так асінхронна азначае, што адбываецца на фоне далёка ад нас паралельна. Вялікае пытанне. Што-небудзь яшчэ? Выдатна. Мы скакаць нашмат больш у асінхронныя запыты з Ajax. АЎДЫТОРЫЯ: Ці ёсць JavaScript-- дзе робіць ён упаў з Model-View-Controller? Ханна Блумбэрг: Вялікае пытанне. Дзе падзенне JavaScript з Model-View-Controller? Гектометр Я думаю, гэта можа fall-- такім чынам, мы звычайна не хацеў хлюпаць яго ў тым, што парадыгма, але я думаю, я б сказала, Такім чынам, JavaScript на самай справе адбываецца, каб дазволіць нам сабраць дадзеныя, інтэрпрэтаваць дадзеныя, на самай справе значныя рэчы з дадзенымі. Такім чынам, гэта вельмі кіравання, як. Але гэта таксама збіраецца дазволіць нам адлюстроўваць рэчы і друку рэчы. Такім чынам, гэта вельмі выгляд-як. Так. Так што гэта накшталт як PHP ў дзе ён можа быць выгляд абодвух. Добры пытанне. Што-небудзь яшчэ? Добра, дзіўным. Рухаемся далей. Такім чынам, давайце паглядзім прыклад аб тым, як мы можам выкарыстоўваць JavaScript у адным з нашых вэб-праграм. Так што я лічу, што гэта index.html з кучай HTML. І што я хачу, каб ты засяродзіцца на гэта сцэнар тэгаў. І гэта кажа, добра, я хачу, каб запусціць некаторыя JavaScript, і вось дзе яна жыве. Ён жыве ў hello.js. І вельмі падобна CSS, мы маглі б змясціць JavaScript у HTML. Чаму можа мы хочам, каб аддзяліць яго? Так. АЎДЫТОРЫЯ: Лягчэй перапісаць? Ханна Блумбэрг: Так. Гэта прасцей у выкарыстанні па розныя вэб-старонкі. Гэта трымае рэчы чысцей. Гэта проста добрая практыка. Высокі. Добры адказ. Так добра, так што гэта будзе каб быць нашым index.html. А потым сюды гэта наша малюсенькі файл JavaScript. І ўсё гэта кажа, абвесткі Прывітанне, свет. Так што ж адбываецца, калі Гэтая старонка renders-- так што калі вы ідзяце ў якой-небудзь вэб-сайце гэта is-- ўсе, што адбудзецца гэта скажа, добра, я збіраецца запусціць гэты код JavaScript. І гэта JavaScript код проста кажа абвесткі Прывітанне, свет. Так што я збіраюся атрымаць гэта прыязны трохі ўсплывальнае. Прахладны? Гэта накшталт як наш першы JavaScript праграма, наш Прывітанне, свет. Давайце паглядзім трохі больш аб тым, што сінтаксіс JavaScript выглядае. І спецыяльна, давайце параўнаем яго З і PHP, якія мы бачылі раней. У JavaScript, мы будзем мець вар, імя зменнай, а затым яго фактычнае значэнне. І мы не паказваем тып, толькі як у PHP, але вельмі у адрозненне ад С. Так, напрыклад, калі мы хочам для захоўвання значэння 50, ў C, мы павінны былі б сказаць, эй, З, я хачу цэлае, Я буду называць яго я і яго значэнне 50. У PHP, гэта крыху лягчэй. Мы кажам, эй, я хачу зменную называецца я і яго значэнне 50. Вельмі дакладна гэтак жа, у JavaScript, мы павітацца, я хачу пераменная называецца I, яго значэнне 50. Кожны наступны раз, калі я выкарыстаць я, мне не трэба, каб напісаць вар. Гэта проста я з гэтага моманту. Такім жа чынам, у З, дзе калі мы кажам, INT I, мы проста выкарыстоўваем I. Прахладны? Добра. Пераходзячы да завес, На шчасце, гэтыя амаль шукаць exactly-- я думаю, што яны сапраўды гэтак жа, як тое, што завесы будзе выглядаць у нешта накшталт C, дзе ваш цыкл будзе мець тры parts-- ініцыялізацыю, стан і абнаўленне. Некаторы час цыклу, ён выглядае сапраўды такі ж. Мы проста даць яму стан. І ў той час як завесы рабіць, зноў, сапраўды гэтак жа. Мы даем гэты стан. Скажам, я хацеў, каб ітэрацыі over-- Я хацеў зрабіць што-то ў пяць разоў. У C, мы маглі б напісаць для ініцыялізацыі я роўная 0. я менш, чым 5, я ++. Толькі розніца ў JavaScript, замест таго каб сказаць INT я роўная 0, мы кажам, вар я роўная 0. Прыгожая. Вось і ўся розніца. Любыя пытанні па любой з, што? Так. АЎДЫТОРЫЯ: Такім чынам, у PHP, гэта тое ж самае што, за выключэннем, але, як зменнай? Або ў тым, што ў прыкладзе вар? Ханна Блумбэрг: Так. Такім чынам, у PHP, гэта будзе быць знак даляра. Дык гэта будзе $ я роўных 0, $ я менш 5, $ я ++. Вялікае пытанне. Зараз давайце пагаворым аб аб'явы функцый. У C, калі мы абвешчаны Функцыя, мы далі яму імя і мы далі яму некаторыя параметры. І ў пачатку, мы пісалі тып. У JavaScript, усе мы трэба зрабіць, гэта напісаць функцыя ключавое слова, кажа, эй, JavaScript, Я збіраюся вызначыць функцыю. У гэтым выпадку ён мае назву суму. І ён прымае два аргументу х і у. Звярніце ўвагу, што мы не клапоцімся аб тыпах х і у. І гэтак жа, як C, у нас ёсць гэта вяртанне ключавое слова, так што мы можам зрабіць нешта як зваротны х і у. А цяпер, калі мы напісалі гэты першы Функцыя, мы можам выкарыстоўваць суму ў любым месцы. І гэта цалкам нармальна. Адзін сапраўды выдатна рэч аб JavaScript, што вельмі у адрозненне ад C што функцыі могуць разглядацца як каштоўнасці. Такім чынам, мы можам зрабіць нешта накшталт тут дзе я мяркую, што я гэта up-- пакрыцця Я прыкрылі Вар суму прайшоў пробы, і мы толькі што сказалі, Функцыя ху роўная зваротны х плюс у. Гэта значыць тое, што можна было б назваць ананімная функцыя. Гэта функцыя без імя. У той час як гэта кажа функцыі сума, бла, бла, бла, гэта проста сказаць функцыі. Але цяпер, нават калі ў мяне ёсць гэта ананімная функцыя, што функцыя на самай справе проста значэнне. Мы можам разглядаць яго як каштоўнасці. Такім чынам, мы можам захаваць яго ў зменнай тое ж самае як мы маглі б захоўваць 50 у зменнай. Такім чынам, мы можам сказаць, добра, я хачу Пераменная, гэта называецца сума, і гэтая функцыя. Такім чынам, гэтыя дзве рэчы на ​​самай справе збіраецца зрабіць тую ж самую рэч, але сінтаксіс трохі адрозніваецца і выгляд вясёлай ноце. Так. АЎДЫТОРЫЯ: Такім чынам, можна назваць функцыя, якая была ананімнай, кажучы, сума кранштэйны 2, 5? Ханна Блумбэрг: Так. Вы можаце назваць гэта ананімны Функцыя такім жа чынам. Вы б суму (2, 5);. Гэта было б зусім нармальна. Калі я не зрабіў вар сума роўная Функцыя, калі я проста выдаліў this-- я ведаю, што гэта на маёй руцэ, але прыкідвацца, што я выдаліў this-- то што функцыя як бы проста сышоў. Вы ніколі не можаце выкарыстоўваць яго зноў, таму што Вы не маюць для яго імя. Цяжка што-небудзь ставяцца да Вы не ведаеце, як назваць. Добры пытанне. Так. АЎДЫТОРЫЯ: Ці можаце вы спасылацца суму ў іншыя месцы са значэннем х плюс у? Ханна Блумбэрг: Ці можаце вы спасылка сума ў іншых месцах са значэннем х плюс у? Я не зусім упэўнены, што вы маеце на ўвазе. АЎДЫТОРЫЯ: Так што вашыя міма паў-ананімна Функцыя сума роўная гэтага ананімная функцыя, так сума Цяпер пераменная, што вы can-- Ханна Блумбэрг: Дакладна. Так сума пераменная, але гэта actually-- так сума з'яўляецца пераменная, значэнне функцыі. Такім чынам, гэта функцыя, якая з'яўляецца своеасаблівай дзіўная рэч, каб абгарнуць вакол галавы так як мы гулялі з З, і вы не можаце зрабіць гэта на мове C. Але зараз мы можам назваць падсумаваць Сапраўды гэтак жа мы маглі б назваць суму тут. АЎДЫТОРЫЯ: ОК. Ханна Блумбэрг: Так. Добры пытанне. Так. АЎДЫТОРЫЯ: Такім чынам, мы не выкарыстоўваць прататыпы ў PHP або JavaScript? Ханна Блумбэрг: Не, мы не трэба выкарыстоўваць прататыпы, асабліва ў JavaScript. Такім чынам, адна дрэнная практыка, што, што я хачу сказаць, што вы не павінны рабіць вам не трэба пісаць уаг I = 50. Вы маглі б проста пачаць рабіць I = 50. І будзе проста зрабіць я глабальная пераменная. Гэта вельмі дрэнная практыка, каб ніколі не кажы ў відавочнай вар я, але гэта нешта можна зрабіць. Перакладчык ня збіраецца крычаць на вас. JavaScript з'яўляецца даволі, як, Вы можаце рабіць тое, што вы хочаце. О, прабачце. Там два. У аранжавых штанах. Ідзіце наперад. АЎДЫТОРЫЯ: Не, ты першы. АЎДЫТОРЫЯ: Не, я проста кажу У мяне не было маю руку ўверх. ДОБРА. Так што, калі вы былі патэлефанаваць што першы раз, цяпер падвесці, мы называем яго так жа, як, х, у, як кожны раз? Ханна Блумбэрг: Так. Такім чынам, гэтыя два істотна зрабіць тое ж самае. АЎДЫТОРЫЯ: І чым перавага выкарыстання аднаго або іншага? Ханна Блумбэрг: Няма перавагай выкарыстання аднаго або іншага. Я проста хацеў паказаць вам два розныя часткі сінтаксісу. Шмат разоў, калі ананімны Функцыі маюць мэта , Калі аргумент на іншы функцыя павінна быць функцыяй. І мы ўбачым, што ў толькі другі з Ajax. Так што, калі не мае ніякага сэнсу, захоўваць яго ў задняй частцы галавы. Вось дзе ананімны Функцыя можа быць карысная таму што гэта не сапраўды варта даючы яму імя, так як мы проста збіраецеся выкарыстоўваць яго адзін раз. Так. АЎДЫТОРЫЯ: Калі х і ў змяненне пазней ад таго, будзе падвесці змяніць, а? Ханна Блумбэрг: Калі х і ў змяненне пазней, будуць падведзены змяніць, а? Так што гэта на самай справе я думаю, тое, што гэта, зноў жа, гэта проста адчувае сябе вельмі розныя з C. Гэта не каштоўнасць. Гэта не 5. Гэта проста сама функцыя. Таму, як толькі вы дасце яму параметры, то вы на самой справе вылічыць значэнне. МАРЫЯ ZLATKOVA: А потым Вы можаце выклікаць функцыю і выкарыстоўваць яго, каб атрымаць нейкую каштоўнасць. Ханна Блумбэрг: Дакладна. Дакладна. Так. АЎДЫТОРЫЯ: Так што, калі вы толькі што захоўваць яго ў зменнай, як вар х роўная суме двух values-- Ханна Блумбэрг: Так. Такім чынам, вы можаце проста зрабіць уаг суму роўная суме двух значэнняў. Так. Любыя іншыя пытанні? Так. АЎДЫТОРЫЯ: Але, што блытаюць суму і суму? Як, калі вы тэлефануеце вашай зменнай суму, вы маглі б назваць функцыю суму? Ханна Блумбэрг: Мм. Мм. Калі вы зрабілі нешта як, сума роўная сума 2, 5? АЎДЫТОРЫЯ: Так. Ханна Блумбэрг: Я лічу, што будзе перазапісваць значэнне сумы. Дык яшчэ адзін цікавы рэч JavaScript з'яўляецца тое, што адна пераменная можа прымаць на кучу розных тыпаў. Дрэнная практыка. Вы не павінны рабіць нешта як тое, што вы толькі што сказалі. Але ў C, калі я ўстаноўлена роўна цэламу ліку, мы ведаем, што гэта ніколі не стане радком. Гэта не той выпадак у JavaScript. Так, добры пытанне. Што-небудзь яшчэ? Добра. Робячы ўсё своечасова. Вядзенне збіраецца. Добра. Калі мы паглядзім на масіў у JavaScript, вось Невялікі прыклад з масіва радкоў. І масівы могуць расці дынамічна. Яны не маюць фіксаваны памер так жа, як што яны робяць на C. Мы можам атрымаць доступ да элементы з дапамогай ўсяго квадратных дужках. Гэта выглядае як PHP і шмат як З, дзе мы можам сказаць, у гэтым выпадку, калі б я хацеў слова JavaScript, я б у обр квадратныя дужкі з 0, 1, 2. І потым, калі вы памятаеце, у C, калі мы хацеў, каб атрымаць даўжыню масіва, гэта было сапраўды раздражняе. Але ў JavaScript, вельмі лёгка. Усё, што мы робім, .length. Дае яму даўжыні. Вось і ўсё. АЎДЫТОРЫЯ: Гэта проста. Ханна Блумбэрг: Так, робіць Ваша жыццё нашмат прасцей. ОК, ня object-- там. Аб'екты ў JavaScript навобмацак шмат, як у C структур і асацыятыўныя масівы ў PHP. Так што мы бачылі Шмат гэта JSON, які выступае за JavaScript Object Notation. І гэта ў асноўным спосаб структуравання нашы дадзеныя. Такім чынам, давайце паглядзім прыклад, верагодна, самы просты. Дык вось прыклад аб'екта што захоўвае клас, CS50. І калі я кажу клас, я маю на ўвазе, вядома, ня like-- ды, курс, CS50. І вы ўбачыце, што усё ў аб'екце будзе ўтрымлівацца у фігурныя дужкі. І мы пачынаем асацыяваць імёны палёў або ключы з рознымі значэннямі. Такім чынам, вы можаце пачаць бачыць, як гэты від адчувае, як асацыятыўны масіў у PHP. Такім чынам, мы збіраемся, каб звязаць поле або імя ключа, вядома, са радком, CS50. Мы збіраемся, каб мець інструктара. Мы збіраемся, каб мець ТФ. Мы збіраемся, каб мець шэраг psets і мы збіраемся, каб запісалі. І адзін крутая рэч, каб адзначыць, усё гэтыя рэчы маюць розныя тыпы, і гэта цалкам нармальна. Гэта выдатна для аб'екта, на самай справе, гэта, верагодна, чакаецца аб'екта каб мець камбінацыю радкоў і нумары і Булевы масівы і і ўсё астатняе, вы маглі б хочаце, каб унутры аб'екта. І звярніце ўвагу, што яны збіраюцца, каб быць імёны або ключы, а затым мы проста ўсталяваць яго роўным з невялікім тоўстай кішкі. АЎДЫТОРЫЯ: Што менавіта гэта азначае JSON? Ханна Блумбэрг: Што менавіта робіць JSON на ўвазе? JSON проста каштуе для JavaScript Object Notation. Гэта проста спосаб фарматавання. Так. Гэта спосаб фарматавання нашы дадзеныя. У C, гэта структур. У PHP, гэта асацыятыўныя масівы. У JavaScript, у нас ёсць аб'екты. АЎДЫТОРЫЯ: Так CS50 гэта аб'ект? Ханна Блумбэрг: CS50 з'яўляецца аб'ект у дадзеным выпадку. Цяпер, як мы на самай справе доступ гэтыя палі або змяняць гэтыя палі. Напрыклад, выкажам здагадку, што мы вырашылі, што Вы хацелі адзін менш PSET у гэтым семестры. Замест дзевяці, мы проста прыйдзецца восем. Як бы мы змяніць гэта? О, няправільна. Ёсць два спосабу, якімі мы можам зрабіць гэта. Нумар адзін з кропкай абазначэнне і нумар два гэта з квадратным абазначэння кранштэйна. Так, напрыклад, калі я хацеў, каб змяніць або доступ поле psets ў нашай CS50 аб'екта, што я буду рабіць гэта CS50.psets, такім чынам, назва аб'екта пункту імя поля або ключа. Вельмі дакладна гэтак жа, гэта менавіта тое, эквівалентна, каб зрабіць CS50, а затым ў квадратныя дужкі, psets. Прахладны? Так. АЎДЫТОРЫЯ: Так JSON тэхнічна JavaScript-ранейшаму, нават калі ў psets мы аддзяліць яго [неразборліва]? Ханна Блумбэрг: Вядома. Такім чынам, пытанне, з'яўляюцца JavaScript і JSON эквівалентна? Так JSON з'яўляецца абазначэнне, у асноўным так, што мы выпісваем аб'ект з JavaScript. Так што яны не зусім тое ж самае. Я б сказаў, JavaScript, ёсць аб'екты ў JavaScript. JSON прымае гэтыя аб'екты і друкуе іх і адлюстроўвае іх або захоўвае іх у добры спосаб. Так JSON ня праграмавання мову так, што JavaScript ёсць. Гэта проста абазначэнне нашы аб'екты ў JavaScript. Так. АЎДЫТОРЫЯ: Дык што ж [Неразборліва] завяршыць? Ханна Блумбэрг: Вядома. Так гэта на самай справе нічога не робіць. Гэта проста спосаб атрымаць доступ. Так што давайце казаць, што мы хацелі змяніць колькасць праблемных набораў з дзевяці да васьмі. Што мы робім гэта нешта зрабіць як CS50.psets = 8;. Так, вялікае пытанне. Гэта проста, каб паказаць вам сінтаксіс. На самай справе не робяць нічога карыснага. Любыя пытанні? Рухаемся далей. Такім чынам, давайце паглядзім на хуткі прыклад таго, як JavaScript працуе, таму што я сказаў вам гэта робіць усё гэтыя рэчы і класныя дазваляе мадыфікаваць вэб-старонак. Давайце рэальна ўбачыць яго ў дзеянні. Так што, напрыклад, гэты HTML-файл. І што я хачу, каб вы засяродзіць увагу на гэта Гэты канкрэтны тэг, які ўяўляе сабой кнопку, з ідэнтыфікатарам search_button. Гэта проста на старонцы. Так што цяпер давайце паглядзім, што мы можам на самай справе. Ну, выкажам здагадку, калі Вы націсніце на гэтую кнопку, мы хочам, каб зрабіць alert-- Вы націснулі кнопку. Давайце паглядзім, як мы можам гэта зрабіць. Так window.onload-- гэта не тое, што вы бачылі ў класе, таму не трэба ведаць гэта для віктарыны. Але гэта ў асноўным кажа, добра, выклік гэтая функцыя, калі акно нагрузкі. Так што гэта проста свайго роду код ўстаноўкі. Не хвалюйцеся так шмат пра гэта. Тое, што я хачу, каб вы засяродзіць увагу на гэта тут. Мы кажам вар searchButton роўная document.getElementById search_button. Такім чынам, як вы ўжо маглі здагадацца, што гэта робіць гэта кажа, ОК, трэба знайсці элемент з ID search_button. І цяпер у нас ёсць, што бягучая элемент, і я збіраецца захоўваць яго ў Пераменная searchButton. І зараз мы можаце выкарыстоўваць гэты элемент і змяніць яго, ці атрымаць доступ да яго каштоўнасці, такія рэчы, як, што. Мы можам на самай справе пачаць ўзаемадзейнічаць з вэб-старонкі. Дык вось я кажу, добра, зараз у мяне ёсць што кнопка, калі яна націснутая, называюць гэтую ананімную функцыю. Так што гэта, дзе ананімны функцыі становяцца карыснымі. І што функцыя рабіць? Ну, гэта проста называе гэта папярэджанне функцыя, і ён кажа, Вы націснулі кнопку Search. Так што ж адбудзецца, калі я іду туды, дзе Гэты HTML-жыве, і я націсніце кнопку, Я атрымаю апавяшчэнне, трохі фантазіі што кажа, што вы націснулі кнопку. Такім чынам, рэчы, каб засяродзіцца на here-- document.getElementById атрымлівае HTML прыватнасці элемент з зададзеным ідэнтыфікатарам. А зараз мы можам усталяваць тое, што павінна адбыцца, калі што канкрэтны элемент кнопкі. АЎДЫТОРЫЯ: Мы павінны пакласці ўсе, што ў? Ханна Блумбэрг: Выбачайце? АЎДЫТОРЫЯ: Ці ёсць у нас фізічна код ўсё гэта? Ханна Блумбэрг: Ці ёсць у нас у фізічна код ўсё гэта? Так. Хіба гэта не выгляд раздражняе? Гэта шмат кода. АЎДЫТОРЫЯ: Вы маглі імпартаваць нешта. Ханна Блумбэрг: Дакладна. Мы маглі б выкарыстоўваць нешта. І ў particular-- аб, гэта кажа, што мне трэба вучыць падзел. У прыватнасці, давайце выкарыстоўваць бібліятэку JQuery, таму што на самой справе доўга і сапраўды раздражняе і я хачу, каб мець магчымасць спрасціць і зрабіць яго карацей і лягчэй пісаць. Так JQuery з'яўляецца бібліятэка JavaScript. Так JavaScript з'яўляецца праграмаванне мова; JQuery з'яўляецца бібліятэка. І гэта робіць кучу рэчаў лягчэй. Гэта робіць змены і адбываецца праз HTML дакумент значна прасцей. Гэта робіць апрацоўку падзеі прасцей. Гэта робіць анімацыю прасцей і гэта робіць Ajax прасцей. Такім чынам, давайце скакаць у двух гэтыя рэчы прама цяпер. Выбачайце. Перш, чым мы робім, некаторыя асноўны сінтаксіс. Гэта тое, што большасць выклікаў бібліятэка JQuery выглядаць. Мы выкарыстоўваем гэтую даляра sign-- няма знак падключэнне да PHP, проста inconvenient-- імя Селектар, кропка, а затым дзеянне. Такім чынам, давайце паглядзім некаторыя канкрэтныя прыклады гэтага. Такім чынам, гэта на самай справе тое ж самае код з слайда падзей. Так што гэта доўга, непрыгожая рэч становіцца гэта нашмат больш прыемна, менш рэч. Так давайце паспрабуем разарваць гэты ўніз. Гэта кажа, добра, jQuery-- гэты даляр sign-- JQuery, знайсці мне ў акно. Дык вось селектар. Пры загрузцы, выклікаць гэтую функцыю. Дык вось ўсё ўсярэдзіне. ДОБРА. Так далёка, так добра? Добра. Цяпер, JQuery, знайсці мяне ў што з ID search_button. І што яна націснутая, выклікаць гэтую функцыю. А потым гэтай функцыі сапраўды гэтак жа. Проста зрабіць трохі абвесткі, Вы націснулі кнопку Search. Так што гэта сапраўды прыемна. Гэта сапраўды кандэнсуецца і спрашчае наш код. Як я ведаю, што гэта ID search_button а не як клас search_button? АЎДЫТОРЫЯ: хэштэгу? Ханна Блумбэрг: Так. Гэты сімвал хэш, гэта проста, як CSS. Так што памятаеце, з CSS, калі мы хацеў, каб выбраць нешта па ID, мы выкарыстоўвалі знак #. І калі мы хацелі, каб выбраць то па класе, мы выкарыстоўваем кропку. Выдатна. Зрабіце пачуццё? Так JQuery, як мяркуецца, проста зрабіць наша жыццё прасцей. Так. АЎДЫТОРЫЯ: Так што я крыху заблытаўся, пра тое, як ананімная функцыя працуе. Ёсць назваць вам гэтую Anonymouse функцыя, функцыя? Як гэта называецца? Ханна Блумбэрг: Вядома. Так функцыя проста ключавое слова, кажа, што я збіраюся вызначыць функцыю. АЎДЫТОРЫЯ: О, добра. Ханна Блумбэрг: ОК? І тады мы праходзім яго ў якасці Аргумент, мэтай якіх давайце гэта ўнутраная одно-- функцыі мышы. Так што, так, так што функцыі, гэта ананімная функцыя, становіцца фактычным аргументам. Так што памятаеце, у JavaScript, мы можа ставіцца да функцыі ў якасці значэнняў. АЎДЫТОРЫЯ: О, добра. Ханна Блумбэрг: Так. Мне падабаецца, што "ой". Ніца. Іншыя пытанні? Час? МАРЫЯ ZLATKOVA: Добра. Добра. Ханна Блумбэрг: Высокі. Некаторыя хутка карысна JQuery. Я не збіраюся ісці праз ўсіх з іх. Гэтыя слайды будуць да онлайн трохі пазней, так што вы можаце праверыць гэта з трохі пазней. Але ў прынцыпе, агульнае малюнак мае, дзе мы гаворым, ОК, эй, JQuery, вось мой Селектар, а затым вось дзеянне. І вы можаце рабіць рэчы, як доступ у значэнне форме, доступ да некаторых HTML, кантроль, што адбываецца, калі карыстальнік адпраўляе форму, падобныя рэчы. Так. АЎДЫТОРЫЯ: Такім чынам, у экзамен, мы будзем павінны ведаць даволі шмат з дакументацыя JQuery. Таму, улічваючы, што мы капіяваць / ўставіць JQuery Дакументацыя ў нашу шпаргалку, дзе ж лінія, праведзеная? Як, колькі нам трэба ведаць? Ханна Блумбэрг: Вялікае пытанне. Пытанне ў тым, па сутнасці, улічваючы, што вы не можа атрымаць доступ да дакументацыі JQuery падчас тэсту, колькі вы павінны ведаць? Мы не чакаем, каб вы прыйшлі з нейкай выпадковай функцыі што можна было б чакаць вас Google. Рэчы, якія з'яўляюцца сумленная гульня, я б сказаць толькі выгляд агульнага сінтаксісу, магчымасць выбару па ID і па class-- гэтак жа, як CSS. А затым фактычныя функцыі сам сабе, мы, хутчэй за ўсё, вам сказаць. Так. АЎДЫТОРЫЯ: Такім чынам, калі вы выберыце па класе будзе азначаць кропку. Ханна Блумбэрг: Так, менавіта так. Добра. Пры выбары па класе, гэта будзе быць кропка, а не знак фунта. Так. АЎДЫТОРЫЯ: Хацелі б Вы перайсці розніцы паміж выбарам па ID і класа? Ханна Блумбэрг: Вядома. Розніца паміж выбару ID і выбару па класе. Так, як сказаў Марыі трохі раней, можа быць толькі адзін элемент HTML- з зададзенай ID, у той час як клас, гэта дазваляе нам групаваць кучу з розных элементаў разам, так што рэчы, звязаныя, але не зусім тое ж самае. Ці значыць гэта, адказаць на пытанне? Высокі. Так. АЎДЫТОРЫЯ: Што рабіць, калі ў вас ёсць некалькі рэчы, якія ў адным класе? Ханна Блумбэрг: Што адбываецца калі ў вас ёсць некалькі рэчаў, якія тое ж самае клас? Так, напрыклад, калі мы толькі з дапамогай чыстага JavaScript, мы хацелі б зрабіць нешта накшталт document.getElementsByClass. А потым, што гэта на самай справе гэта вяртае масіў элементаў. І вы павінны альбо перабраць іх або знайсці, які вы хочаце. Гэта не дасць Вы адзін элемент. Гэта дасць вам масіў элементаў. Вялікае пытанне. Што-небудзь яшчэ? Высокі. Так што я думаю, калі вы знаёмыя з любы JQuery вы бачылі ў PSET, вы павінны быць добра ісці. Пытанне? О, няма. Мне сапраўды трэба вучыць. Паслабцеся. Усё будзе ў парадку. Я туды патрапіць. Давайце пагаворым аб Ajax. Так Аякс будзе a-- добра, давайце пачнем з таго, што гэта варта. Гэта абрэвіятура. Гэта каштуе для асінхронных JavaScript і XML-. І XML з'яўляецца ў асноўным будзе [Неразборліва] з тыпам нашых дадзеных. Але мы на самай справе не выкарыстоўваецца XML. Замест гэтага, мы проста выкарыстоўваем JSON. Таму ў асноўным, гэта некаторыя data-- асінхронны, JavaScript і дадзеныя, у гэтым выпадку, JSON. І наша мэта, як мы ўжо згадвалі крыху раней, з'яўляецца, каб мець магчымасць зрабіць Запыт, што запыт ўжо рабіць яго справа ў фон, але па-ранейшаму рабіць усё, што мы маем намер рабіць. А потым, калі гэтая інфармацыя гатовыя, то мы будзем ўключаць яго. Такім чынам, давайце паглядзім, што гэта на самай справе выглядае. І гэта, вы павінны быць крыху знаёмыя ад pset8, той, які вы толькі што споўнілася ст. Дык вось сапраўдны JQuery функцыя, мы маглі б хочаце ведаць about-- гэтага знака даляра. Так ён кажа функцыя JQuery, .getJSON. І тое, што гэтая функцыя робіць яго прымае URL і некаторыя parameters-- так што я думаю, у выпадку з pset8, як гэта было, URL-адрас быў articles.php і Параметры было ісці = некаторы паштовы індэкс. І гэта кажа, добра, зрабіце запыт на гэты адрас з зададзенымі параметрамі. І, што проста здараецца. Калі ён заканчвае, гэта альбо збіраецца для паспяховага завяршэння ці гэта будзе правал. Так што гэта эквівалент выкліку Роб і папрасіць яго зрабіць нешта. А потым, калі ён ператэлефаноўвае, ён альбо хачу сказаць, я зрабіў ці я не змог. Такім чынам, у выпадку, калі вы знаходзіцеся зроблена, вы кажаце, добра, я зрабіў. І тады вы называеце гэтую функцыю. У гэтым выпадку, гэта будзе функцыя, якая прымае інфармацыю. Той, які мы, як правіла, клапоцяцца пра тое, дадзеныя, дадзеныя, якія мы на самай справе былі вернутыя у выніку выкліку .getJSON. І вы можаце зрабіць што-то з ім. Такім чынам, у выпадку pset8, мы прадставілі яго ў выглядзе спісу. Адмова будзе функцыя што называецца, калі запыт не па якой прычыне. І ў выпадку pset8, мы проста console.log яго. Любыя пытанні па гэтай нагоды? Так. АЎДЫТОРЫЯ: Ці можам мы проста выкарыстоўваць функцыю тэта замест функцыі, textStatus, jqHXR. Ханна Блумбэрг: Вядома. Так што так, я думаю, што ў PSET, мы толькі што бачылі функцыю дадзеных. Так што гэта проста the-- так, добра. Гэта тое, што мы бачылі ў PSET. Гэта зусім нармальна. Такія толькі, калі вы хочаце выцягнуць больш інфармацыі, гэта тое, што вы маглі б атрымаць ад .getJSON. Добры пытанне. Што-небудзь яшчэ? Так. АЎДЫТОРЫЯ: Так .getJSON з'яўляецца Аякс? Ханна Блумбэрг: ОК. Так што гэта свайго роду хітрасць. Гэта функцыя JQuery, які дазваляе Вы зрабіць асінхронных выклікаў. І гэтыя асінхронныя выклікі, гэта тое, што мы на ўвазе як Ajax. Так. Гэта заняло ў мяне вельмі шмат часу, каб расцягнуць, калі я быў студэнтам. АЎДЫТОРЫЯ: Ці можаце вы сказаць, што зноў? Ханна Блумбэрг: Так. Ці магу я сказаць, што яшчэ раз? Гэтая функцыя .getJSON, гэта функцыя JQuery. І гэта збіраецца зрабіць асінхронны выклік. І гэтыя асінхронныя выклікі, мы спасылаўся на тыя, як Ajax. Любыя іншыя пытанні? У нас ёсць усяго пара хвілін засталося. І Марыя збіраецца ахінуць бяспекі а затым мы збіраемся каб быць амаль скончылі. МАРЫЯ ZLATKOVA: Высокі, добра. Так што гэта проста is-- узяць пару секунд, каб праглядзець гэты. І гэта не тое, што сапраўды выдатна. А можа хто скажыце мне, чаму? Што адбываецца ў Foo і можа мог патэнцыйна прывесці да нешта дрэннае, і што, што называецца? Так. АЎДЫТОРЫЯ: Калі аргумент, што гэта прайшоў у больш чым 12 сімвалаў, гэта можа перапоўніць. МАРЫЯ ZLATKOVA: Дакладна. Ідэальны. Што гэта завецца? Вы толькі што згадалі яго. АЎДЫТОРЫЯ: Перапаўненне буфера. МАРЫЯ ZLATKOVA: Так, перапаўненне буфера. Так што гэта тое, што мы называюць перапаўненнем буфера. І мы бачым, што ўнутры Foo, мы вызначылі нашу буфера, з, з памерам ад 12. Тым не менш, у асноўным, мы не праверыць у любым выпадку на ўсіх Ці так, што argv1-- быў другім аргументам. Мы не правяраем, ці з'яўляецца Памер мэтазгодна. Так што, калі мы мелі асабліва зламыснік якія пакласці ў некаторых аргументу, які быў больш, чым 12, і затым, магчыма, за межы, якія Аргумент, былі некаторыя выкананы код што ён спрабаваў зрабіць нешта дрэннае з ім; то гэта, што б адбылося, будзе пераважаць вяртанне адрас функцыі Foo, выклікаючы функцыю, калі вяртанне выканаць гэты код. І тады дрэнныя рэчы можа адбыцца. Ці мае гэта сэнс для ўсіх? І як мы можам абараніць супраць гэтага? Любыя прапановы? У асноўным, усярэдзіне патэнцыйна Foo, як мы можам праверыць, каб пераканацца, што гэта не можа здарыцца? АЎДЫТОРЫЯ: Калі памер 12 будзе перавышаны, Вы б вылучыць дадатковую памяць? МАРЫЯ ZLATKOVA: Прапанова гэта, вылучыць дадатковая памяць памерам перавышаны. На самай справе, мы можам зрабіць што-то нашмат прасцей, чым, што, як добра. Мы можам проста атрымаць даўжыню радка аргументу, які ўводзіцца, праверыць, калі гэта менш ці роўным 12-- што тое, што мы хочам яго быць, таму што мы не хочам, гэта выхад за межы нашага буфера. І потым, калі гэта не так, мы можа працаваць з аргументам. І потым, калі гэта адбудзецца, мы на самай справе хочам каб Yello патэнцыйна у карыстальніка. Але гэта, як мы б гэтага рабіць. Так. АЎДЫТОРЫЯ: Ці маглі б вы растлумачыць тетсру вельмі хутка? МАРЫЯ ZLATKOVA: О, прабачце. Так. Тетсру прымае ўсе is-- прабачце, ОК. Тетсру прымае ўсе, што ў бары, усё, што перадаецца на Foo ў якасці аргументу каманднага радка. Такім чынам, гэта зойме argv1. Argv1 называецца бар тут. Такім чынам, гэта зойме бар і гэта будзе скапіяваць яго ў с. АЎДЫТОРЫЯ: ОК. МАРЫЯ ZLATKOVA: І ён збіраецца copy-- трэці аргумент проста ставіцца пра тое, колькі гэта будзе скапіяваць у с. АЎДЫТОРЫЯ: Ах. Так што гэта свайго капіяванне усё гэта потым. МАРЫЯ ZLATKOVA: Так, гэта капіраванне усяго гэтага. Так. Па-першае, мы ўпэўненыя, бар ня роўны нулю, таму што гэта паказальнік. Тады мы атрымаем даўжыню радка бар. Мы ўпэўненыя, што гэта менш або роўна 12. А потым, таму што мы пераканаліся, мы можам на самай справе тетсру і быць упэўненыя, што гэта нармальна. Любыя пытанні? Выдатна. У мяне ёсць два сапраўдным або ілжывым пытанні. Можа хто-небудзь сказаць мне адразу калі яны праўдзівыя або ілжывыя? Так, гэта хлусня. Дакладна. Абодва з іх з'яўляюцца ілжывымі. Такім чынам, выкарыстанне аднаго пароля ніколі не сапраўды добрая ідэя таму што, калі хтосьці ведае пароль, яны могуць проста доступ да ўсіх іншых свае рахункі. А потым іконы нічога не рабіць для забеспячэння бяспекі. Мы павінны, як правіла, шукаюць HTTPS замест HTTP і URL. І некаторыя іншыя віды нападаў, якія мы ўжо згадвалі, што Дэвід згадваецца ў лекцыі, атакі SQL-ін'екцыі. Мы ўжо бачылі, што, калі мы don't-- Функцыя CS50 запыт гарантуе, што SQL атакі ін'екцыі не можа адбыцца. Але калі мы не выкарыстоўвалі CS50, цытата, канец цытаты "ў запыце," мы павінны былі б пераканацца, што карыстацкі ўвод на самай справе не некаторыя SQL запыт, які будзе выклікаць ўсе Нашы сталы для ўпаў ці нешта дрэннае, каб адбудзецца з нашай базай дадзеных. Згон сесіі з'яўляецца яшчэ адзін тып атакі што адбываецца, калі некаторыя дрэнна чалавек выкарыстоўвае сесіі некаторых ахвяры ID для доступу да рэгістрацыйнай інфармацыі. Такім чынам, вельмі трывіяльны прыклад, які як калі ў нас ёсць кампутар у грамадскім, то дрэнны чалавек уваходзіць у, а затым яны маюць печыва, захаваныя. І печыва не зменіцца сесіі. Тады мы ахвярай перайсці ў а затым зайсці на сайт. Печыва не зьмяніць на працягу пэўнага сеансу. І тады ахвяра рэгіструе ў сайт, а затым сыходзіць. І тады чалавек, які ўзыходзіць можа па-ранейшаму выкарыстоўваць іх ідэнтыфікатар сеансу каб атрымаць доступ да інфармацыі. Дык вось адзін з прыкладаў як гэта магло здарыцца. І тады я б не занадта турбавацца аб канкрэтнай код або што-небудзь так што можа прывесці да гэтага, але якія маюць нейкай ідэяй, што ў зменныя, якія ўдзельнічаюць у гэтым ёсць. А потым маніпуляваць загаловак дадзеныя яшчэ адзін тып атакі што мае Дэвід казаў а. І гэта як раз ставіцца да тое, што можа адбыцца, калі адказ, то HTTP адказ ўнутры нашага загалоўка ня прадэзінфікаваць належным чынам. І любы з fields-- напрыклад, калі хто-то перапісвае адзін з загалоўку Значэння ўтрымліваць нешта большае, чым што яны павінны contain-- і фактычна змяшчае, напрыклад, 200 Код ОК-статус, то яны патэнцыйна можа зрабіць шкоднасны рэчы, калі яны не павінны. Але я не хвалюйцеся б занадта шмат пра канкрэтную код якія могуць прывесці да гэтага, толькі выгляд разумення на высокім узроўні такія рэчы. Я думаю, што гэта ўсё што ў нас ёсць, каб пакрыць. Дзіўны. Хто-небудзь ёсць якія-небудзь пытанні па любой з рэчаў, якія мы распавядалі? Так. АЎДЫТОРЫЯ: Так адзін выгляд больш матэрыяльна пытанне. Ці з'яўляецца ўтрыманне асноўным засяроджаныя на рэчы пасля віктарыны 1? МАРЫЯ ZLATKOVA: Так Пытанне ў тым, ці з'яўляецца ўтрыманне сканцэнтравана галоўным чынам на рэчы пасля віктарыны 1? Такім чынам, акцэнт робіцца на пасля Тэст 1, за выключэннем што мы павінны засяродзіцца на рэчах, у pset5 і шмат структур дадзеных што мы разгледзелі. І мы не можам сказаць, што мы можа ігнараваць што-небудзь да , Таму што гэта абапіраецца на яго, а таксама. Так засяродзіцца на тым, што, плюс pset5 матэрыял як у тым ліку звязаныя спісы, стэкі, Чарзе, і ўсё што Ханна падышла. Ханна Блумбэрг: Дакладна. Так, мы пайшлі па ўсёй C рэчы у самым пачатку вельмі хутка. Але пераканайцеся, што для разгляду гэтага. Вярніцеся назад і паглядзець віктарыны 0 водгук. Яшчэ пара лагістычныя адзначае, проста ў той час як у нас ёсць Вашу ўвагу. Мы будзем мець працоўныя гадзіны і ў панядзелак, і ў аўторак вечарам. Яны збіраюцца, каб быць у MD 119. Гэта ўсё на сайце, так што калі вы не чуеце яго, ні клопатаў. МАРЫЯ ZLATKOVA: з 8:30 да 11:00. Ханна Блумбэрг: Так, з 8:30 да 11:00. Мы будзем там. Мы будзем там, каб адказаць на пытанні. Гэта даволі холад і весялосьць. Вы, хлопцы, можаце задаць любыя пытанні што ў вас на віктарыну 1. І віктарыны на 1 Серада, так што ўдачы. Калі ў вас ёсць якія-небудзь пытанні, можа быць, прыйсці пагаварыць з намі тут адзін на адзін. Прахладны. Вялікі дзякуй. МАРЫЯ ZLATKOVA: дзякуй, хлопцы. АЎДЫТОРЫЯ: Ура. [Апладысменты]