>> R.J. AQUINO: Давайте просто начать.
Так что это Викторина 1.
Вот некоторая информация высокого уровня.
О страницы для викторины является в этом не URL, больше не CS50.net, хотя это
будет по-прежнему работать.
Это CS50.harvard.edu/quizzes/2013/1.
Это большой О странице, говорю вам, где и когда, а именно в следующую среду
в кучу номеров.
И в следующую среду, я значит через два дня.
Вся эта информация есть.
Но это накапливается.
>> Так что все от первой половине год потенциально на викторине,
потому что вы не можете действительно сделать расширенный вещи в C без, если условия и
для петель и тому подобное.
Но будет акцент на пройденный материал с Викторина 0,
начиная с структурами и File Ввода / вывода Это, как правило, более
сложной, чем Викторина 0.
Средняя оценка, как правило, ниже.
Учиться.
>> В то время как вы учитесь, не забудьте использовать CS50/discuss чтобы задать свои вопросы
и читать вопросы других людей.
Так что, если вы не имеете любые вопросы, войти и читать
вопросы ваших друзей.
Они, вероятно, хорошие вопросы.
И принять практические тесты.
Мы давая викторины для семь или восемь лет.
Они все в Интернете.
Будущие вопросы похожи чтобы старые вопросы.
Вот как мы делаем их.
>> Викторина пока не существует.
Никто из нас не видел его.
Но это будет выглядеть предыдущие викторины.
По этой обзорной сессии, это не исчерпывающий список тем.
Вы не можете просто присутствовать в этом, а затем быть совершенно готов к викторине.
В противном случае, это не было бы что большая часть викторины.
И это также не обязательно все, что вы должны знать о любой
данная тема.
Это предназначается, чтобы подвергнуть вас вещей мы рассмотрели, напомнить вам, что мы
покрыты, и то, как в которые мы рассмотрели его.
Но вам придется пойти дальше и глубже, когда вы изучаете, чтобы перепроверить
что вы знаете все о любой данный тема и что вы заполнили
все углы, которые были покрыта лекции.
>> Тест отмечает сказать вам, чтобы перейти к писец заметки, часы лекций видео.
Это хороший способ убедиться, что вы имеете покрыты все ваши базы.
Так начинается, когда я сделал это слайды, я пытался поставить, где я нашел
информация.
Таким образом, для файла ввода / вывода, например, неделя 7, Понедельника лекция, и отвечал
Раздел 6 и проблема Набор всех есть информация о файле ввода / вывода Я сделал
это для каждой теме.
Так что те название горки могут быть полезно для вас.
>> Так вот у нас файла ввода / вывода Помните, что в Проблема Set 5, мы использовали FOPEN, FClose,
FWRITE, FREAD и FSEEK.
Оправившись 30ish в формате JPEG и того, изменен и запутались с
растровые изображения, вы должны быть очень знакомы с этими функциями
и как они работают.
не Если вы больше не знакомы, определенно рассмотреть их.
И убедитесь, что вы понимаете, что различные аргументы,
когда они используются.
>> Но общие связанных с файлами ошибки Вас могут попросить о -
хорошо, если вы забыли, чтобы проверить, Еореп действительно работал, прежде чем ложиться
изменить файл.
Это может быть плохо.
Если вы забыли FClose файл что вы fopened, что похоже на
утечка памяти.
Это очень плохо.
И, забыв проверить, если у Вас есть достигли конца файла перед вами
начать писать к нему.
>> Так что, если вы говорите, эй, я на конца файла.
Дайте мне еще 5 байт.
Ну, это, вероятно, не собирается работать так, как вы ожидаете.
Вот уж это для файлового ввода / вывода, потому что мы сделали так много,
с установить проблема.
Так что, если вы поняли, что происходит в Архив задач 5, помню bitmats
и в формате JPEG, то вы, вероятно все набор для файлового ввода / вывода Если это немного
нечеткие, безусловно, пересмотреть эту проблему установить и связанный с ним материал.
>> Структуры были темой, что были на линия между Quiz 0 и викторины 1.
Не вполне сделать разрез для викторины 0.
Таким образом, они определенно будет на Викторина 1, неделя 7, понедельник.
Что это структура?
Здесь мы показываем структуру.
Это как нового типа.
Это как контейнер для нескольких полей.
>> В этом случае, мы объявили структуру студент, который имеет два поля -
Строка, мы называем имя и внутр что мы называем возраста.
Поэтому, когда я обойти студентов или я изменить студентов, я буду в состоянии
доступ к их имя и их возраст.
Давайте посмотрим на код для этого.
Здесь мы видим, что я объявил студент с, так же, как
Я заявляю, любую переменную -
внутр х, внутр у, и так далее.
>> Вот студент с.
Он начинает с чем на его полях.
Так давайте установим их.
Вы устанавливаете поля структуры с точки.
Так что я сказал здесь, что s.name = RJ.
И s.age = 21.
Вы также можете обновить поля так же, как вы бы обновить
Значение переменной.
Поэтому я хочу, чтобы изменить свое имя от RJ с нет периоды до R.J. пишется
правильный путь.
Было бы s.name = RJ, то же самое как мы сказали это изначально.
И тогда вы можете получить к ним доступ.
>> Так мы установили их.
Мы обновили их.
Вы также можете получить доступ к ним в том же самом пути.
Так вот, я печатаю R.J. Является 21 лет.
И я доступ к этим значения с s.name и s.age.
Так вот доступа Структуры с точечной нотации.
Да, вопрос?
>> АУДИТОРИЯ: Есть ли причина, по предыдущий слайд, что вы не ставил
студент в верхней строке, как ЬурейеЕ структура студент, а затем
студент в конце?
>> R.J. AQUINO: Таким образом, вопрос был, на На этом слайде, мы обычно видели
ЬурейеЕ структуры узла, а затем поля в структуре и
то слово узел.
И как же здесь я не говорил, TypeDef структура студент, а затем
поля в структуре, а затем студентом?
Причина в том, что я не нужно доступ к нему внутри структуры.
Так что это нормально, чтобы оставить его без имени.
Я могу просто оставить его как анонимный структура.
>> Причина мы делаем это для связанных списков и вещи в том, что внутри вы должны
для ссылки на ить узлов звезду.
Таким образом, структура должна иметь имя, так что вы можете получить доступ к нему позже.
Это незначительная деталь.
Но вы, как правило, см. ЬурейеЕ структуры фигурные скобки, если вам не нужно
наименование и ЬурейеЕ структуры некоторых имя затем в фигурные скобки, если вы будете
нужно имя.
Так что это хороший вопрос.
>> И в тот момент, мы, как правило, чтобы изменить Структуры и обойти Структуры по
справка, а не по значению.
Так что мы просто обойти указатели на Структуры вместо передачи вокруг
Структуры себя.
Таким образом, вы очень часто будет используя, в этом случае, студент * или
структура узла * или узел * вместо из студентов или узлов.
Так вот, я сказал, хорошо, переменная PTR будет также адрес с.
Это будет указатель студенту R.J.
>> Таким образом, мы можем получить в этих областях так же, как мы получаем ничего.
Во-первых, ID ссылаться указатель чтобы получить структуру.
Это * указатель, а затем точка, а затем возраст.
Так для доступа к полю, и я обновил его сейчас до 22, потому что, давайте
скажем, это был мой день рождения.
Там в ярлык синтаксис с помощью стрелки здесь.
Так PTR стрелка возраст просто так же, как * ptr.age.
Так вот, это то, что вы будете иметь запоминать и помнить.
>> Вы использовали его много в pset6, орфографии PSET.
Но это на самом деле то, что происходит на под капотом.
Это разыменования а затем к нему доступ.
Вопрос?
>> АУДИТОРИЯ: [неразборчиво].
>> R.J. AQUINO: Так почему же мы, используя указатели как структур вместо
Структуры себя?
Причина будет, если вы проходите структура в зависимости, вы, вероятно,
хочу передать вокруг только 4 или так байт, которые представляют указатель, как
противоположность потенциально 30 или 40 байт, которые структуры.
Так прохождения что-то в функцию легче, когда дело
меньше, короче говоря.
Вопрос?
>> АУДИТОРИЯ: Вы, возможно, упомянул об этом в начале, но есть
другие слайды на [неразборчиво]?
>> R.J. AQUINO: Эти слайды будет после сессии по проведению обзора.
Мы опубликуем их на сайте.
Так двигаться дальше и двигаться по чуть-чуть быстрее, мы собираемся говорить о данных
структур.
Есть много.
Мы рассмотрели кучу из них.
Вот то, что вы должны понимать, о структуре данных.
>> Вы должны действительно понять на высоком уровень, что каждая структура является.
Можете ли вы объяснить на английском языке, чтобы ваш друг, который не принял CS50, как
мы организации наши данные и почему мы бы использовать что-то на этом пути?
Это вещь один.
Вещь два, понимают реализация.
Так понимаю, как использовать эти вещи в C. И мы будем идти по этому поводу.
>> А потом, что три будут знать работают раз и ограничения
различные структуры, которые вы используете.
Так понимаю, почему вы должны использовать вместо массива хэш-таблицы.
Понять, как быстро, в среднем, доступа к хэш-таблицу есть.
Понять, что операции быстро на связанный список, но медленно на массивах и
наоборот.
Таким образом, чтобы понять, что, вам придется понять обозначения Big-O просто знать
как говорить о них Мало ли что.
И мы будем говорить об этом.
>> Так первая вещь, связанные списки.
Вот высокого уровня картинка связанного списка.
Покажем это в классе.
Мы обычно имеют 10 человек стоя на сцене.
Но у нас есть ряд узлов, где каждый узел имеет некоторое значение и указатель
его следующему значению.
Таким образом, чтобы добраться от одного узла к другому, вы просто сказать, дайте мне следующий узел.
У вас есть, что узел.
Дайте мне следующий узел.
У вас есть, что узел.
Дайте мне следующий узел и т.д. пока нет узел левой.
>> Так продолжают говорить о это на высоком уровне.
Это очень легко вставить вещи в связный список.
Если вы не заботитесь о порядке, вы можете просто бросить его
в самом начале.
Это постоянная времени.
Но трудно найти значение.
Если вы пытаетесь спросить, составляет семь в моем списке?
Вы должны пройти каждый значение.
Это семь?
Снова и снова.
И это О (п).
Так при изучении для викторины, сравните это с массивами.
>> Разве что в порядке?
Свет погас тусклым.
ОК.
Когда это связанный список лучше?
Когда это массив лучше?
Так что давайте посмотрим на код.
Вот потенциальный узел.
Это структура.
Он имеет Int N, которые будет наша ценность.
И она имеет структуру узел * следующий, который наша указатель на следующий узел.
Так вот, мы видим, что мы случайно чтобы поставили Int в нашем узле.
Но если бы это было связано список гольца звезды или связанный список поплавков, мы
полностью может сделать это.
>> Помните, в pset6, вы, вероятно, имели связанный список символьных звезд или просто
статические массивы символ.
Давайте посмотрим здесь операции.
Поэтому мы хотим, чтобы вставить новый п в нашей связанного списка.
Мы начинаем с головы указатель, который указатель на этот узел, который имеет
значение п и рядом указателя, что указывает на этот узел является значением
п и ближайших нуль, потому что это последний узел.
Таким образом, в целях экономии времени, я буду положить весь код на экране.
И мы будем идти через него несколько строк за один раз.
>> Так вот код.
Я надеюсь, что это читается.
Первое, что мы делаем, мы Malloc новый узел.
Так что имеет указатель на новый узел, что не совсем есть любая постановка
в нем нет.
Мы проверяем, чтобы убедиться, что новый узел не является нулевым.
В противном случае, мы должны сдаваться.
Так проверив, что, мы теперь установить значения в узле.
Таким образом, мы поставить новый п в нашу н области.
И мы установили следующий указатель, чтобы указать на оригинальная голова, так что мы можем
сейчас вставили это узел в нашем списке.
>> Наконец, у нас есть глобальную точку головы на наш новый узел, так что если бы мы должны были
начинаются в голове, мы были бы на это Новый первый узел вместо
старый первый узел.
И когда эта функция выходит, не переменная новый узел больше не существует,
потому что это было локальными для функции.
Так что это состояние мира.
Наш глобальный руководитель указывает на наш новый Первый узел, который указывает на наш
Оригинальный первый узел, какие точки к узлу после этого.
>> Это было вставки.
Я надеюсь, что было относительно просто следовать.
Если вы сомневаетесь, нарисовать картину.
Так что я считаю, что говорить о связанные списки и глядя на
Код очень не полезно.
В то время как, глядя на картины связаны список позволяет мне думать, ох, как
У меня есть этот узел здесь.
Но, если я обновлю этот указатель, она заканчивается отключен.
И я забыл, где узел идет.
И код выходит.
И у вас есть несколько узлов что отключены.
И вы не в конечном итоге с список вы хотите.
>> Так что если вы рисуете картину и сделать это шаг за шагом, мы надеемся, вы увидите
правильный порядок вещей в терминах обновление указателей, чтобы убедиться,
что список приходит вместе.
Вставка относительно проста.
Более сложным будет вставки в отсортированный список.
Более сложная функция удаления и найти, таким образом просматривая список на
увидеть, если там что-то есть.
Может быть, вы сделали это в pset6 когда вы попали в ваш хэш-таблицы, и Вы сказали,
ну, это слово яблоко в моем связанного списка?
>> Таким образом, вы, возможно, уже сделали это.
Но определенно, освежить вашу память и попытаться повторно реализовать находку и
переопределить удалить для связанного списка.
Веселье примечание стороны, есть также двусвязный списки, где у вас есть
указатели, которые указывают как вперед, так и назад, так что вы могли бы пойти на
следующий узел и к предыдущему узлу.
И встал вопрос о прошлогодних викторина этого типа, говорить
о двусвязный списки.
>> Так вот, это структура, что ты относительно знакомы, потому что большинство
из вас, вероятно, использовали их на pset6.
Вот один, что немного менее знакомы.
В качестве примечания, я думаю, что Викторина 1 в первую очередь сложнее, чем Викторина 0, потому что
материал, который вы делаете, вы не сделали больше.
Чтобы поместить это еще один способ, для Quiz 0, вы написали много C. И мы
спрашивал вас о С.
>> Для Викторина 1, мы собираемся спросить вас о PHP и JavaScript, которые вы
не написал столько.
Мы собираемся спросить вас о C-кода, Вы не написали столько,
этот продвинутый C материал.
Так определенно, практика того, что мы говорили в лекции, что вы
не обязательно делать по проблеме установить.
>> Говоря об этом, вы не написали стек по проблеме установить.
Но это было в лекции.
Вот высокого уровня картина стеки, что мы показываем каждый год.
Это стек лотков в Mather столовая.
На высоком уровне, стеки в прошлом пришел, первым ушел структуры данных.
Это означает, что вы собираетесь навести -
1, 3, 7, 12, 14, отрицательный 0.
Единственное, что я не мог иметь сказал - отрицательный 3, 0.
Вы поставить все эти вещи дюйма
И последнее вы положили в первый тот, который собирается выйти.
>> Так у вас есть две операции -
толкать и поп-музыки.
Все положить в том, что я был жестикулируя, подобные этому, толчок.
А потом, когда я достигаю, чтобы захватить что-то или достичь на вершине, чтобы захватить
что-то, это поп-музыки.
Таким образом, мы собираемся реализовать стеки.
И мы показали им в лекции использовании массивов.
Но вы могли бы сделать их используя связные списки.
Стек представляет собой концептуальную данных Структура, не нравится
от конкретной реализации одной.
>> Так что он должен выглядеть?
Это будет выглядеть вроде как это.
Вы должны были бы целое размер.
И вам придется массив значений, что мы называем лотки, потому что это
что картина была для нам - Int лотки -
, а затем некоторые максимальная емкость.
Так что будет настаивать выглядит?
Ну, если у нас есть стека с, затем нажать что-то на с, мы получим
размер с.
И что будет следующим открытое место нашего массива.
Так что, если у нас есть три вещи в нашей стека, Затем лотки 3 будет следующим
открытое место, потому что 0, 1, и 2 уже заполнены.
>> Таким образом, мы поместить значение в s.trays [s.size], третье место.
А потом мы увеличиваем s.size сказать, эй, у нас было три вещи, прежде чем.
Теперь у нас есть четыре.
Поэтому в следующий раз вы нажимаете, вы собирается положить что-то в 4.
Или в следующий раз, когда вы поп, вы собираетесь смотреть на 3, а не 4 или любой другой.
А потом мы вернемся верен скажем, эй, нам это удалось.
Это работало.
Как правило, если функция это должны вернуться истинным или
ложь всегда возвращает истину, вы можете сделали что-то не так.
Так это работает?
>> Ну, она отлично работает в течение 1, и 2 и 3, и 4, и пять.
Но, допустим, я достигну своей мощности.
Я тогда столкнулись с проблемой, потому что если размер такой же, как способности, я
сейчас пытается положить что-то в массив, в котором у меня нет места.
Так короткая проверка, чтобы исправить это.
Если s.size == МОЩНОСТИ, возвращение ложным.
В противном случае, пойти и сделать то, что мы сделали.
Так, что еще мы могли попросить о для стеков?
Что еще следует учиться?
Что еще вы должны практиковать?
>> Ну, реализации поп-музыки.
Мы уже сделали толчок.
Я это исправим.
Реализация не-массив, где Вы используете связанный список, возможно.
Реализация без внутр.
Мы сделали целыми здесь.
Но она могла бы быть поплавки.
Я мог бы быть строками.
Это могло бы быть символьные звезды.
Посмотрите на последние тесты для видов вопросы мы попросили о стеков.
>> Скажу, что мы рассмотрели стеки вокруг так же, как мы рассмотрели их в
последние годы.
Таким образом, вопросы викторины должны быть хорошим показателем.
Двигаясь вперед еще быстрее, очереди.
Они как стеки.
Но они сначала вошел, первым вышел.
Если ты англичанин очереди слово вероятно, сделал много смысла для вас.
В противном случае, вы можете иметь слышали о нем в виде линии.
Они работают как линии в магазине Apple.
Первым человеком, чтобы показать в 3:00 утром первый
человек, который купит его IPad.
>> Поэтому у нас есть две операции -
поставить в очередь и из очереди.
Ставить ставит кого-то в линии.
Dequeue тянет первый человек с линии.
Опять же, мы можем реализовать это с массивом.
Так в чем же структура у нас показал в лекции?
Это был один.
Опять же, числа.
Опять же, размер и эта новая вещь фронт.
Почему существует нечто, называемое передней?
Это индекс на следующий элемент из очереди.
Это просто внутренне отслеживание первый парень, чтобы показать, чтобы мы
вытянуть ее, когда мы должны.
>> Определенно смотреть на лекций и попробуйте для реализации Enqueue и Dequeue
при изучении для викторины.
Важные вещи, чтобы думать.
Упаковочная вокруг, если передняя плюс Размер заканчивается больше, чем возможностей.
Опять же, если ваша структура заполнена, Вы будете иметь проблемы.
Хеш-таблицы вы видели раньше.
Большинство из вас, вероятно, реализуется их на pset6.
Это структура, которая стремится к O (1) вставки постоянная времени и O (1)
Постоянная времени поиска.
>> В CS50, мы реализовали это как массив связанных списков.
Ключевым компонентом в хэш-таблицу является хэш-функция.
Так он преобразует ваш вклад, скажем, словарное слово, в число,
которая будет наш индекс.
И мы будем использовать этот индекс в нашем массиве.
Итак, вот милый маленький картина от study.50.net.
Кидаем все слова в наш хэш-функция.
И хэш-функция говорит нам где поставить эти слова.
>> Это все здорово на земле, где есть только одно слово для каждого слота.
Но, как вы помните из pset6, есть больше слов, чем слотов.
Так что же происходит, когда вы получить столкновения?
Вместо того чтобы хранить одно значение в, скажем, хэш-таблицу 3, вы
хранить связанный список.
И так вместо того, дыня здесь, вам придется связанный список,
где первый узел дыня.
А на следующий узел кошка.
И третий узел столкновения, давайте сказать, потому что все эти слова начинаются
с С.
>> Так что большинство из вас сделали это для pset6.
Если вы не сделали хэш-таблицу на pset6 и вы пытались что-то вроде
синтаксического дерева, безусловно, пересмотреть хэш-таблицы.
Если ты сделать это на pset6, безусловно, рассмотреть хэш-таблицы.
И если вы сделали это на pset6 и это не так выработать совершенно правы и вас
было много неприятностей с ним, безусловно, рассмотреть хэш-таблицы.
Так что урок действительно, безусловно, рассмотреть хэш-таблицы.
>> Подавляющее меньшинство из вас пробовал из примеряет pset6.
Высокого уровня изображения.
Это что-то вроде этого, где каждый узел имеет множество детей, где каждый
ребенок соответствует букве.
И каждый узел также говорит, эй, я ни слова.
Таким образом, в данном случае, слово Максвелл, если вы будете следовать М к А к
X-W-E-L-L, а затем следовать ему еще один.
И вы получите этот символ, дельта, которая мы означают означает это слово.
Так Максвелл это слово.
Эти дельты всей означающее какие вещи являются слова и которые
вещи не.
>> Таким образом, в pset6, данные мы сохранили наряду любой из наших узлов было "Я
слово. "И здорово, что об попыток будет они демонстрируют вставки и
поиск в O (длина слова).
Так что просто пройти через Максвелла, это M-A-X-W-E-L-L. Так семь или восемь -
Я не могу сосчитать -
шаги, чтобы получить до конца и проверить вещи.
Так быстрое внедрение здесь.
Роб прошел связаны перечислить в его посмертных.
Так проверить это.
Извините.
Прошел виде дерева в его посмертных.
Так проверить это.
>> Но вы в принципе есть каждый узел имеет 27 указатели на ближайшие узлов и одного
Boolean ибо я боюсь слово.
Проверьте посмертно Роба за то, как это на самом деле реализуется.
Наша окончательная структура, наши деревья и бинарные деревья поиска.
Так, глядя на них, они были покрыты совсем недавно Неделя 8, понедельник.
Дерево похоже на виде дерева, кроме вас не обязательно должны 27 узлов на
каждая точка.
И у вас нет этих данных друг на шаг, который означает ли -
путь не имеет значения.
В то время как синтаксического дерева, путь сверху снизу, Максвелл, было важно для нас.
>> Но каждый узел имеет несколько дети, возможно.
У нас есть еще немного словарный запас.
Корень дерева является на самом верху.
И мы говорим, что очень нижний узлы, которые не имеют
дети листья.
Так как синтаксического дерева, дерево Структура узлов.
Распространенный тип дерева, что мы собираемся поговорить о бинарное дерево, где
каждый узел не имеет детей или один ребенок или двое детей.
Так эта картина здесь не бинарное дерево, потому что
узел 3 имеет троих детей.
>> Но если бы мы должны были игнорировать тех, остальное этого является бинарное дерево, потому что это
демонстрируется свойство, что каждый узел имеет ноль, один или два ребенка.
Так как же мы выражаем это в коде?
Мы могли бы иметь узел, где каждый узел имеет целым числом внутри него, а также
как указатель на дереве слева и указатель на дереве
Право, так двух детей.
Как это полезно?
Ну, если мы сделаем правила о том, где мы положить узлов, мы можем сделать поиск быстрее.
>> Так что есть понятие бинарного поиска дерево, где все узлы
левое поддерево имеет меньшее значение чем узел, мы смотрим на.
И все узлы правого поддерева имеют большую ценность
чем корневого узла.
Теперь, что выглядит, как много слов.
Я собираюсь положить его внутрь дважды цитаты и показать вам фотографию.
Так вот пример бинарное дерево.
Смотрите, что мы начинаем с 10.
Все слева 10 меньше, чем это.
И все, что правее больше, чем это.
>> Но больше, чем, что каждый узел в дерево выражает эту недвижимость.
Таким образом, узел 7 имеет 3 к влево и 9 вправо.
Так что все те, меньше, чем 10.
Но, глядя на только тех, 7 имеет От 3 до слева и 9 по его право.
И точно так же справа, 15 имеет 14 чтобы его левая и 50 до его право.
Таким образом, три узла там, 15, 14, и 50, также действует бинарное дерево
или действительный бинарное дерево.
И все они больший, чем 10.
Таким образом, они могут быть на право там.
Есть вопрос?
>> АУДИТОРИЯ: Как вы справляетесь, когда у вас есть две семерки?
>> R.J. AQUINO: Да.
Как вы справляетесь с двумя значениями что одни и те же?
Некоторые бинарные деревья поиска сказать, что вам игнорировать дубликаты, потому что цель состоит
только, чтобы сказать, что я видел эти вещи до сих пор.
Некоторые бинарные деревья поиска, можно сказать, есть счетчик внутри узла.
Другие могут сказать, что все в левый меньше или равно.
И все, что правее больше.
>> Все зависит от того, что Проблема в том, вы решаете.
Так в словаре, например, вы не будет заботиться о дубликатов.
Вы бы выбросить их.
Но другие проблемы вы могли бы заботиться.
>> АУДИТОРИЯ: Можно ли есть 1 слева от 15, который
меньше 10?
>> R.J. AQUINO: Нет.
Если 14 здесь были 1, то это не быть допустимым бинарное дерево,
потому что все правее 10 должно быть больше, чем это.
И мы увидим, почему.
Если в земле поисках моя цель найти 14, я начинаю в корне.
Так что я с нетерпением.
ОК.
Мы собираемся начать в корне.
Посмотрите на 10.
>> Ну, 14, наша цель, больше, чем 10.
Так должно быть справа.
Это очень похоже на всю телефону книга, что мы сделали, двоичный
искать там.
Но вместо двоичного поиска в массиве, мы двоичный
поиск в этом дереве.
Таким образом, мы все еще ищем 14.
Ну, 14 меньше, чем 15.
Так что, если это в нашем дереве, он должен быть в этой области здесь.
Она должна быть справа от 10 и влево до 15 лет.
>> И поэтому мы проверяем этот узел.
И яй, мы нашли 14.
Я не собираюсь идти через него.
Но вот код.
Это на самом деле относительно просто,
потому что это рекурсивной.
Что мы могли спросить вас сделать на викторине?
Мы могли бы попросить вас написать этот код.
Мы могли бы попросить вас, чтобы посмотреть на этого кода и изменить этот код и объяснить, что
он делает.
Да.
Вопрос?
>> АУДИТОРИЯ: Являются ли эти горки будет доступны, как они были в последний раз?
>> R.J. AQUINO: Да.
Таким образом, эти горки, безусловно, будут размещены.
>> АУДИТОРИЯ: Они на самом деле отвечал Прямо сейчас на сайте.
Дэвид только что сделал это.
>> R.J. AQUINO: Горки Прямо сейчас на сайте.
Я, вероятно, залатать пару опечатки я отметил и исправлять их.
Но есть ток версия на сайте.
Другие вещи, которые мы могли попросить вас сделать -
написать вставки.
Написать итеративный версию рекурсивная функция, мы просто показали вам
или говорить об этих вещах, как и в пункты, на словах, в предложениях.
Сравнивая времени работы и объясняя то, что вы хотели бы использовать двоичный
дерево поиска для вместо хэш-таблицу, например.
>> Так понимаю, эти структуры на довольно глубоком уровне.
Понять, как их писать, как использовать их, как говорить о них.
И вы будете все готово.
Вопрос?
>> АУДИТОРИЯ: Когда вы пишете бинарное дерево поиска, как вы
определить, какое значение сделать это как корень?
>> R.J. AQUINO: Таким образом, вопрос был, что значение вы делаете как корень?
В зависимости от вашего кода, вы может иметь глобальный корень.
Таким образом, вы, возможно, скорее всего, имел в pset6 глобальная хеш-таблицы.
Или вы могли бы пройти корень в качестве аргумента.
Так что это функция поиска здесь принимает аргумент узла *.
И поэтому все, что узел вам случится быть глядя на то, что вам лечите
в качестве корня, когда вы проходите его дюйма
И я все готово.
Таковы мои слайды.
Следующий человек может прийти своп в ноутбуке и микрофон.
>> ROB BOWDEN: Я думаю, что, возможно, придется интерпретировать этот вопрос по-разному.
Но я интерпретировал это как, если у вас есть числа 1, 2, и 3, как мы
знать, чтобы сделать 2 корень в отличие от 1 или 3?
Если мы сделаем 2 корня, то это красиво 1 и 3, чтобы левый и правый.
Но если 1 является корнем, то это от 1 до сверху, 2 право, 3 вправо.
Поэтому по умолчанию вы не знаете, что делать корень.
И для любого алгоритма мы ожидаем, чтобы дать вам, только первое, что вы
вставка будет корень.
Или мы дадим вам бинарное дерево, что уже существует, что имеет корень.
Но другие алгоритмы такая, что корень будет обновлять, так что если вам
в конечном итоге в ситуации, где это 1, 2, 3, было бы автоматически обновлять в
сделать 2 нового корня, так что она по-прежнему хорошо сбалансированы.
>> АНЖЕЛА Л.И.: Круто.
Эй, ребята.
Я Ангела.
И я собираюсь завершить наш C , а затем перейти в некоторые из наших веб
технологии -
HTTP, HTML, и CSS.
Поэтому первое, что является буфер Переполнение атак.
Так что давайте взглянем на этот код.
Это довольно просто.
Там в функции Foo.
И это ничего не возвращает.
Но это занимает в указатель в строку под названием бар.
>> И он собирается заявить об этом буфер, который представляет собой символ
Массив, имеет 12 слотов.
И он использует тетсру, который находится всего в функция, копии с одного адреса
в другой.
Так что это пытается скопировать в наш буфер от того, что
бар указывает на.
Так хоть понимаете, что случилось с этим кодом?
>> АУДИТОРИЯ: Если бар длиннее С, они будут перезаписаны.
>> АНЖЕЛА Л.И.: Да, именно так.
У нас нет гарантий того, что бар будет меньше, чем 12.
Мы просто сделали некоторое произвольное число 12.
И мы были как, будем надеяться, что наш пользовательский ввод меньше
12 символов.
Таким образом, в идеальном мире, если бы наш вход всегда, как ожидалось, то мы получим
что-то вроде: Привет.
Это меньше, чем 12 символов.
Он получает читать в символ с.
А потом мы что-то с ним сделать.
Это действительно не имеет значения.
>> Но злоумышленник мог сделать нечто большее, как это, где они
дать нам все, что бар указывает на, это будет указывать на этот огромный массив
просто годов.
И это путь дольше, чем 12 лет.
Так он собирается пройти весь путь здесь, где возвращение
адрес раньше.
Так скажем, эту функцию называется Foo.
Может быть, Foo называли некоторые другие Функция, которая называлась по основной.
Поэтому, когда Foo работает, он должен знать, где бы вернуться.
>> Если Foo назывался некоторой функцией имени Баз, он должен знать, что это
должны вернуться к Баз.
И вот что это обратный адрес здесь говорит нам.
Но если мы перезаписать его с некоторыми другими адрес, в данном случае, это
представление выступлении на самого начала этого буфера, то
что на самом деле произойдет в том, что вместо того чтобы вернуться обратно в Баз,
который называется наша функция, это просто собирается идти на фронт этого кода.
>> И если это было там, потому что хакер чувак пришел и
вводят это, то, возможно, эта сумма из пятерки на самом деле не годов.
И это на самом деле просто код, который перерывы ваш компьютер или что-то.
Таким образом, чтобы защищаться о такого рода вещь, у вас есть, чтобы никогда не предположить, что
пользовательский ввод определенная количество символов.
Например, когда вы делали орфографии, вы сказали, что слова были
только будет 40 символов долго максимум.
И это было хорошо.
>> Но если нет, то вы должны были бы убедитесь, что только для чтения в 45
символов одновременно.
В противном случае, вы можете перезаписать ваш буфер.
Любые вопросы по что.
Да.
>> АУДИТОРИЯ: Не могли бы вы просто поговорить немного больше о них?
>> АНЖЕЛА Л.И.: Извините.
Да.
>> АУДИТОРИЯ: микрофон только для видео.
Я постараюсь и проект.
Привет, ребята.
Sup?
Так что давайте перейдем несколько вещей в Библиотека CS50, которые вы используете
весь семестр, в основном чтобы получить пользовательский ввод.
Как вы знаете, вы включаете CS50 библиотека, просто делая CS50.h, который
содержит все прототипы Функции, которые можно использовать, как
GetString и GetInt, и GetFloat, и так далее.
И есть в этом одна линия в CS50 библиотека, которая определяет строку, которая
вы, ребята, все знаем, к настоящему времени это просто символ *.
>> Но давайте взглянем на как GetString работает.
Это очень сокращенный вариант.
Вы можете подтянуть библиотечные файлы CS50 от, я думаю, manuals.CS50.net.
И вы можете прочитать фактическая функция.
Но это покрывает некоторые из важные части.
Таким образом, мы создали некоторый буфер с некоторой мощности.
И то, что мы делаем, мы получаем один символ за один раз из стандартного с.
Вот где пользователь вводит Текст в консоли.
>> И таким образом мы собираемся, чтобы читать в характер тех пор, пока это не новая
линия, и это не конец файла, который это конец стандартного ввода.
И для каждого символа, что мы читаем в, если этот символ заканчивается добавления
к числу символов мы читали в, и это больше, чем наших возможностей,
то, что мы делаем, мы просто изменить размер нашего буфер так, чтобы это вдвое дольше.
Итак, еще раз, это защищает от буфера Переполнение атаки, потому что вы прочитали в
персонаж одновременно.
И если в какой-то момент вы читаете в слишком многие, вы просто расширить свой буфер.
Вы умножьте его на два.
И тогда у вас есть больше возможностей.
>> В противном случае, вы просто добавить персонаж в буфер.
И после того как вы считали все персонажи, он будет уменьшен буфер
обратно к нормальному размеру, добавить нуль терминатор, а затем вернуться.
Теперь, давайте посмотрим на GetInt.
Может вы, ребята это прочитать?
Я могу увеличить немного.
Я не знаю, как компьютеры работают.
Не берите в голову.
Я не могу увеличить должным образом.
>> Это действительно трудно.
Мне очень жаль.
Давайте просто посмотрим на это.
Так что GetInt делает это сначала читает в строке с GetString, который
мы реализовали раньше.
И важная часть отметить, является ли это обмен, что в конечном итоге
чтение как на самом деле не в строку, то мы просто возвращаем INT_MAX к
представляют сбой.
Почему мы возвращаемся INT_MAX вместо отрицательного 1 или 1?
Есть идеи?
>> АУДИТОРИЯ: [неразборчиво] отрицательный 1 на один.
>> АНЖЕЛА Л.И.: Да, именно так.
Так ты способ чаще просто хочу на вход 1 или отрицательной 1 при запросе
для п-го и все, что п исчерпан.
Это огромная.
Вы, наверное, не будет его использовать.
Так что это, как дизайнерское решение, чтобы убедитесь, что вы случайно не
возвращает ошибку или вы не вернуть 1, который может быть разобран
как правильный ответ.
Так что, если строка не существует, мы вернемся INT-MAX.
В противном случае, мы используем Sscanf, которая, как зсапЕ.
Но он считывает из строки.
>> И у нас есть это отформатировать Строка, которая является% I% с.
И мы стараемся и сочетать это с что пользователь дал нам.
Мы хотим, чтобы количество подобранных вещей за 1, что означает, что мы только
действительно хотите, чтобы соответствовать целое в окружении, может быть, белый
пространство, может и нет.
В этом случае, если вы положите в чем-то как бар, бар не соответствует вообще,
потому что должна быть целое в самом начале.
Так не sscan не включали 0.
Так что вам не вернуться, что.
>> С другой стороны, если вы положите в чем-то как 1, 2, 3, A, B, C, которое соответствует
как целое, но и характер после него.
Так Sscanf вернется 2, которые тоже не является идеальным.
Вы же не хотите 1, 2, 3,, В, С, чтобы быть действительным внутр.
Так что также не работает.
Но сказать, вы положили в что-то вроде 50.
, Который будет соответствовать% I, а это значит, он будет получать читать в п.
А теперь, п будет содержать число 50.
И тогда вы можете вернуть его.
>> В противном случае, вы попали Повторить.
А потом он просто не идет снова, пока вы получаете правильное ввод от пользователя.
Есть вопросы по этому поводу?
>> АУДИТОРИЯ: Так что если вы были распечатать значение GetInt на [неразборчиво]
было бы просто целое число, а макс?
>> АНЖЕЛА Л.И.: Да.
Так что если вы используете GetInt, вы должны взять на себя что вы не хотите п-й максимум до
быть действительным вход, потому что вы собираетесь предположить, что это было плохо.
>> АУДИТОРИЯ: Если у нас не было символ с и кто-то положил в 1, 2, 3, Сэм, не правда ли
по-прежнему работать в течение 1, 2, 3?
>> АНЖЕЛА Л.И.: Я думаю, что это будет работать.
Но вы не хотите, чтобы 123Sam быть допустимым для ввода пользователем.
Это не совсем внутр.
Так что не кажется справедливым разобрать его в виде целого числа.
ОК.
В этом случае, давайте перейдем на к Интернету.
Так HTTP не является языком.
HTTP это всего лишь набор стандартов для как вы отправить вещи от клиентов,
вот вы, к серверам.
Это другие люди в Интернете.
>> Так HTTP выступает за гипертекста Протокол передачи.
Это сердце и душа всей сети.
Гипертекст часть просто относится к HTML.
Передача является клиенты, как вы будете отправлять запросы
серверы, которые дают ответы.
И протокол просто, как сделать вы ожидаете сервер вести себя?
И как вы предполагаете вести себя таким образом, что вы можете упорядочить этот
процесс коммуникации?
>> Так HTTP запросы очень похожи в этом.
GET является тип запроса.
Вы, ребята, видели запросы GET и POST запросы.
Это второе, что там, / я, это только URI или URL, где вы
хочу пойти в хозяина.
Так эта просьба просит страницы, как www.facebook.com / меня.
И это запрос GET.
А потом этот HTTP/1.1, вот только версия HTTP вы используете.
Это почти всегда 1.1.
>> А тут еще куча других вещей тоже.
Вы можете увидеть их, если вы открыть консоль, когда вы
просмотра веб-страниц.
Ответы выглядеть больше как это.
В верхней части, опять же, тип HTTP вы используете
с последующим кодом состояния.
Так 200 ОК является все обошлось.
Вот ваш контент.
Ваше содержание будет следовать.
А потом он расскажет вам, какие содержания и другие вещи тоже.
>> Коды состояния, есть несколько важные те, которые вы должны знать.
200 ОК, как золотой все в порядке.
Все работает.
403 Forbidden.
Это вы, наверное, видели, если вы забыли установить права что-то неправильно.
Это означает, что у вас нет прав на создание
доступа, что на сервере.
Это как, нет, вы не можете видеть это.
404 означает, что вещь не существует.
Не найдено.
Вы, наверное, видели, что много.
>> 500 Внутренняя ошибка сервера, как правило, как что-то пошло не так на стороне
сервера.
Итак, когда вы были реализации pset7, если у вас ошибки PHP, вы могли бы
фактически перейти на страницу и посмотреть целая куча PHP ошибки вещи.
Но это обычно не происходит, потому сайты действительно не хочу, чтобы
скажу вам, почему их сайт сломан.
Они, наверное, просто вернуться 500 Внутренняя ошибка сервера.
>> А тут еще 418 я чайник.
Там целая история о почему это вещь.
Но вы можете прочитать о том, что в свободное время.
Там целая куча другие коды статуса тоже.
Но это те, вы должны знать.
Итак, давайте поговорим о HTML.
HTML, помните, не язык программирования.
Это язык разметки.
Это означает, что она описывает содержание.
Это говорит вам, что HTML документ выглядит как или не, как он выглядит
но, как это структурировано.
>> Так что определяет структуру и Семантика веб-страниц.
Это как, это пункт.
Это упорядоченный список.
Это как части моей странице.
Вот название.
Он делает такие вещи, как, что.
Это не стиль любой из что, поскольку это то, что вы делаете в CSS.
И это выглядит как серия вложенных тегов.
Таким образом, чтобы использовать пример действительно основной HTML страницы, у вас есть DOCTYPE
Декларация там.
>> Это DOCTYPE декларация говоря, мы с помощью HTML5.
Тогда у вас есть большой HTML тег.
Он содержит голову и тело.
Внутри головы, у вас есть титул.
Это то, что идет в названии строке вашего браузера.
У нас есть ссылка тег, который связывает во внешней таблице стилей.
И тогда у нас есть сценарий, который тянет от внешнего JavaScript, а также.
>> А потом внутри нашего тела на самом деле то, что можно на странице.
У нас есть пункт, а затем изображение внутри этого пункта.
Это одна картина котят.
Обратите внимание, что изображение тег закрывает себя.
Таким образом, вместо открытия с изображением а затем делает еще один / изображение, вы
просто эту маленькую черту здесь, который закрывает его.
И тег изображения также имеет этот ключ значение атрибута называется ALT.
Это альтернативный текст, что происходит при наведении мыши на него.
>> Большинство элементов HTML есть значение ключа вещи, которые вы можете дать его, различные
настройки.
Да.
>> АУДИТОРИЯ: [неразборчиво].
>> АНЖЕЛА Л.И.: Ну, так что это атрибут тега.
Так что если вы используете JQuery, вы могли бы сделать выберите image.getAttribute.
И тогда вы можете искать получить атрибут ALT.
И это даст вам котят.
Если вы помните формы в HTML, вход элементы будут иметь атрибуты имен.
И вот что PHP использует для отправки запросы, когда формы.
>> АУДИТОРИЯ: Вы уже что-то о том, как, если вы используете kittens.jpg или
то, что имеет пропавших без вести папки или другие файлы файл?
>> АНЖЕЛА Л.И.: Да.
Так что это то, что называется относительной Путь, потому что я не даю
Вы полный путь.
Это как когда в C, если вы делаете Еореп некоторые файл, если вы Еореп hi.txt, что
hi.txt как ожидается, будет в то же самое каталог, если вы не дать ему более
Комплекс путь.
>> АУДИТОРИЯ: Таким образом, вы можете указать в какой папке [неразборчиво]?
>> АНЖЕЛА Л.И.: Да.
И вы можете посмотреть, как это сделать.
Но если бы я хотел, чтобы kittens.jpg из родительского каталога, я хотел бы сделать
.. / Kittens.jpg.
Да.
Извините.
Да.
О человек, я забыл вопрос.
Какой был вопрос?
О, вопрос был есть, kittens.jpg Ожидается, что в том же каталоге?
И в этом случае, это так.
Но вы также можете дать ему определенный путь так, что он не должен быть.
Хорошо?
>> CSS.
Так CSS, как HTML, не язык программирования.
CSS это просто серия правил моделирования.
Она выступает за каскадные таблицы стилей.
И вы использовать его в сочетании с HTML на страницах стиля.
Таким образом, есть три способа Вы можете включить его.
Один из способов вы можете сделать это в голове часть вашего HTML, вы можете просто
открыть тег стиле, а затем придерживаться некоторые CSS правила там.
Это довольно в порядке.
Да.
>> АУДИТОРИЯ: Не могли бы вы поставить тех, Тэги стиля между ними, давайте
скажем, тело и / тело.
И тогда вы бы стиль только в теле.
>> АНЖЕЛА Л.И.: Вы могли бы.
Она будет работать.
Но вы не должны, потому что укладка вид метаданных, которые должны идти в
глава документа.
Тело должно действительно содержат только что на самом деле происходит, чтобы
отображаться на вашей странице.
>> АУДИТОРИЯ: Таким образом, вы бы поставил стиль в вашей голове, чтобы стиль
Вся веб-страницы, не так ли?
>> АНЖЕЛА Л.И.: Да.
Так положить стиль здесь, эти правила CSS будет применяться ко всей странице, основанной на
их селекторы.
Таким образом, лучший способ сделать это вместо наличия тег стиль в вашей голове,
у вас есть эта ссылку на внешний стиль лист, как я показал вам в
Предыдущий пример.
Это нужно, он пытается и находит файл style.css, а затем тянет его
и использует в том, что в качестве стили для страницы.
И ваш style.css бы просто посмотрите, как это.
Это будет просто куча CSS.
>> И, наконец, есть еще один способ, которым Вы может включать в себя CSS, которые вы действительно
никогда не должны делать.
Это вызов встроенного стиля.
И поэтому любой HTML элемент может также взять атрибут стиля.
А потом в этом атрибут стиля, вы можете дать ему правила CSS.
Таким образом, в этом случае, что бы ни дел я определении прямо здесь, это будет
есть черный фон и цвет белый текст.
Но вы не должны этого делать, потому что это будет он ставит свой стиль
внутри вашего HTML.
>> И я знаю, что мы говорили о HTML является структура и CSS является стиль.
Если вы сделаете это, он смешивается их вместе.
И это не очень чисто.
Так что не делайте этого.
На примере CSS, там, мы просто выберите тело HTML
документальный фильм.
И мы, как, все в будет Comic Sans.
Я также не рекомендую.
Но вы могли бы сделать это.
>> Второе правило прямо здесь, это будет чтобы выбрать элемент на
страница с ID магистрали.
Поэтому, что бы HTML элемент, я сказал ID = Основной, я собираюсь дать, что
Рентабельность 20 пикселей и выровнять все, весь текст, к центру.
Последнее, что выбирает по классу CSS.
Таким образом, любой элемент на странице, что я дал класс раздел, я собираюсь сделать это
Цвет фона светло-голубой.
Да.
Вот все, что я получил.
Вопрос?
>> АУДИТОРИЯ: Что означает хэштегом перед основным делать?
>> АНЖЕЛА Л.И.: Вопрос в том, что делает хэштегом перед главной дел?
В этом случае, хэш в CSS означает выберите по ID.
Так что, если у меня были некоторые HTML элемент, как DIVID = основные, это правила CSS выбирает
вещь с ID магистрали.
И точно так же, период перед раздел Выбор по классу CSS или
выберите по HTML класса.
>> АУДИТОРИЯ: Почему существует имеет перед 6 в цвет фона?
>> АНЖЕЛА Л.И.: Да.
Таким образом, вопрос, почему существует хэш до 6?
Это отличается от того хэш.
Это означает, что вы даете шестнадцатеричное цвет.
Так шестигранные цвета, это просто представляет собой цвет.
И вы помните RGB троек, когда Вы сделали PSET судебно-медицинской экспертизы?
Это аналогично.
Первые две цифры представляют сколько красный в цвете.
Вторые два представляют сколько зеленый.
И третий представляет сколько синий.
И хэш это будет представлять цвет.
>> Так что ничего от 0, 0, 0, 0, 0, 0 до F, F, F, F, F, F действует.
Это какой-то действительный цвет, который может отображаться в вашем браузере.
Вопрос?
>> АУДИТОРИЯ: В чем разница между пользования ID и класса?
>> АНЖЕЛА Л.И.: Вопрос в том, что разница между
пользования ID и класса?
Вы можете иметь только один элемент в HTML документ, который имеет данный идентификатор.
Таким образом, только одна вещь, на моей странице разрешается иметь ID магистраль.
Таким образом, вы использовать его для этого является заголовок.
Это навигации.
Это подвал.
Классы отличаются, потому что вы можете применять классы, как много элементов HTML
как вы хотите.
>> Так, например, я сделал раздел класса, потому что, наверное, больше, чем один
раздел на моей странице.
Ты просто разрешено иметь до элементы на странице с тем же
класс, но только один с определенным ID.
>> АУДИТОРИЯ: Так точка представляет класс?
>> АНЖЕЛА Л.И.: Да.
Точка представляет класс.
Круто.
Вот и все, у меня, ребята.
Спасибо.
>> [Аплодисменты]
>> ZAMYLA Чан: Привет, всем.
Я Zamyla.
Я собираюсь покрывать PHP, MVC, и SQL сегодня.
Много материала, что я буду покрытие будет в значительной степени
прямо из pset7.
Хорошо.
Так что же такое PHP?
PHP расшифровывается как PHP гипертекста Препроцессор.
Так что, само по себе, это рекурсивная имя, которое довольно прохладно.
PHP представляет собой сервер язык сценариев, и это обеспечивает базовую программу
и логические подкрепления на нашем сайте.
>> Так Анжела много говорили о HTML и CSS, что сделает структуру
сайта.
Но что, если вы хотите изменить, что Содержание динамически или если он изменяется
на основе пользователя или определенные условия?
Вот где PHP приходит дюйма
Теперь, как правило,, PHP может занять несколько меньше линии для осуществления то же самое
в С. Это потому, что PHP обрабатывает память Управление для программиста,
в отличие от нас того, чтобы таНос бесплатно, и тому подобное.
>> Но так как PHP является интерпретативная язык, как правило, это может выполнить
немного медленнее, чем C, которая является компилируемый язык.
Потому что мы движемся программирование языки, давайте посмотрим на то, как
Синтаксис будет отличаться.
Давайте быть очень осторожны, чтобы не запутаться с этим.
Так с синтаксисом PHP, находитесь ли вы вложение вашего PHP внутри от HTML
файл или в пределах. файл PHP себя, вы нужно заключать код в открытом
PHP и закрытые PHP теги, как следующим образом, как и на экране.
>> Переменные в PHP.
Каждый переменная начнется с знак $ следуют по имени
переменная.
Теперь, переменные в PHP слабо набрали, Это означает, что вам не нужно
, чтобы указать, какой тип данных это когда вы объявив ее.
Однако это не означает, что они не имеют никаких видов на все.
Так что если я объявить переменную и просто установить его равным 1, а затем я объявляю
еще одна переменная, установите его равным "1" а потом еще один 1.0, ну,
В зависимости от типа равенства операторы я использую, если я хочу, чтобы сравнить
всех типов, а затем они будут равны.
Но если я хочу, чтобы убедиться, что типы равны, PHP может до сих пор
что, хотя мы и не указывают какой тип это, когда мы
сначала сделать файл.
>> Теперь, в PHP, хотя мы переключения с программированием
языки из C, у нас еще есть наш Надежный, если условие, так же, как это.
У нас еще есть наши рамки, будучи, как раз как это, где вы положили в вашем
состояние, а затем Тело цикла.
А потом у нас тоже есть цикл, которые обычно выглядит следующим образом.
Так что, если я хотел перебрать все девять psets и представить и вызвать
Функция submitPset, то я могу сделать это здесь, что вы, ребята, все
сделано к этому моменту.
Поздравляем, кстати.
>> Для камеры, люди сказал, спасибо.
Теперь, если вы не хотите, чтобы просто использовать это цикл, то PHP на самом деле также
есть вещи, называется FOREACH петли.
Так что, если у меня был массив целых чисел, 0 по 8, хранятся в psets массива,
то я мог бы иметь цикл по каждому элементу, что перебирает каждый номер в psets.
А потом я мог бы назвать то же самое функционировать в восемь раз,
так же, как я делал раньше.
Так что это для каждого цикла приятно, потому что Вы не должны, если вы не знаете,
Точная длина массива, что вы уже, то с помощью этого цикл по каждому элементу
будет заботиться о том, что для вас.
>> Так что я сделал psets как массив.
Давайте посмотрим на это.
Массивы в PHP, как правило, так же, как те, которые мы имели в С, где
Вы можете объявить массив.
И здесь, я могу объявить пустой массив а затем создать динамически с помощью
Индексы в виде целых чисел.
Так индекс 0, я собираюсь хранить целое имени 1.
В индексом 1 моего списка, я собираюсь для хранения значения 2.
И на третьем индексировать данные, но Второе число, я собираюсь
сохранить номер 12.
>> Теперь, это прекрасно, что работает он хорошо работает.
Но сказать, что это имеет значение для меня что каждый индекс держит.
Для меня, индекс 0 означает, как многие кошки у меня есть.
А индекс 1 означает, как многие совы у меня есть.
А следующий означает, как много собак.
Ну, тогда это указать, что, вместо того, чтобы того, чтобы помнить 0 относится к
кошки и от 1 до сов, я могу использовать ассоциативные массивы, а это значит, что
вместо целых чисел, как моих показателей, Я могу на самом деле использовать строки.
>> Так что это весьма полезно.
И вы в основном просто заменить целые числа со строками.
И там вы имеете ассоциативный массив.
Да.
>> АУДИТОРИЯ: Есть ли причина, почему существует подчеркивания для второго
часть, потому что мой список имеет массив.
>> ZAMYLA Чан: Вопрос был, есть Есть причина, почему есть
подчеркивают между моим и списка?
Нет.
Вот только, как я именования мой переменной.
>> АУДИТОРИЯ: На первый линия, это одно слово.
>> ZAMYLA Чан: Мои извинения.
Я это исправим.
Да.
Они должны быть такими же имя переменной.
Хороший улов.
ОК.
Так что давайте перейдем к строке объединение.
Если бы я хотел взять две строки, то я могу объединить их
с помощью оператора точка.
Так что, если у меня есть Мило как имя и Банан как фамилии, а затем
объединения с оператором точка и затем положить пространство между
сделает строку, содержащую Milo Банан, который я могу затем эхо или,
скорее, распечатать.
>> Говоря о эхо, давайте поговорим о некоторых полезно -
упс.
Мне очень жаль.
Несколько полезных функций PHP.
Поэтому у нас есть -
технические трудности.
Одна секунда.
Я послал его.
Проблемы PowerPoint.
И мы вернулись с PHP функций.
>> Таким образом, мы функцию требуют, где если вы передаете в файле, вот только
Пример файла, который Я мог бы пройти дюйма
Тогда, что будет включать в себя код PHP из этого файла, что я указывать.
И он будет оценивать, что дюйма
Тогда у нас также есть эхо, которое является параллельно Е.
Выход параллельная сломать, который выходит из блока
код, который вы дюйма
А потом пустые проверяет, является ли данный переменная, как нуль или ноль или
что приравнивается к порожняком.
Да.
>> АУДИТОРИЯ: Для объединения строк точка оператор один, в PHP, является то, что
же, как в JavaScript, где он с помощью точка для объединения означает плюс?
Таким образом, для полного имени, вы могли бы доллар подписать первый +, а затем + в последний раз?
>> ZAMYLA Чан: Да.
Таким образом, вопрос, была ли в PHP мы можно использовать тот же объединение строк
как в JavaScript с плюсов.
Иосиф получите в этом позже.
Я думаю, что у него есть слайд на что.
На самом деле, все по-другому.
Таким образом, в JavaScript, вы должны использовать плюс для объединения строк.
А в PHP, вы должны использовать оператор точка.
Так что они разные.
>> ОК.
Так что теперь, когда мы рассмотрели все это PHP, где делает это
действительно пригодится?
Ну, это очень удобно, когда мы может объединить его с нашего HTML.
Таким образом, наш PHP даст нам силу изменить содержание HTML-страницы перед
его загрузка.
Таким образом, на основе различных условий, обычно конкретный пользователь, это
вошли в систему, мы можем показать разная информация.
Линда, ты есть вопросы?
>> АУДИТОРИЯ: Можете ли вы объединить целое также?
>> ZAMYLA Чан: Да, можно.
Таким образом, вопрос был, если можно объединять целые или другие
variable.s сейчас, мы перейдем к MVC, которая это парадигма, что мы использовали в
pset7 и много веб-дизайнеров использовать для организации кода в файлах
в их веб-сайте.
М обозначает модели.
А в принципе, файлы модели будет заниматься с взаимодействия с базой данных.
Просмотр файлов, они относятся к эстетика сайте.
И ручки контроллера запросы пользователей, анализирует
Данные, делает другую логику.
>> В pset7, мы объединили модель и контроллер.
И мы просто назвал их контроллеры и поместить их в общий каталог.
И просматривать файлы, мы используем их в качестве шаблоны в каталог шаблонов.
Так что это схема здесь также представляет что же это за разделение с
модель и контроллер в фиолетовый здесь слева и
вид с правой стороны.
Так что это схематическое, что некоторые из вас Возможно, вы видели в нерабочее время или
Диаграммы, что мы рисовали, как вы были выяснить свой PSET.
>> Таким образом, здесь, в данном контроллер, модель контроллер, у нас есть функции
, которые относятся к запрашивая SQL В базе, выполнения логики PHP.
Может быть, вы будет искать акция в Yahoo!
Финансы.
Или может быть, вы бы просто проверить, см., были ли представлены пользователь
сформировать уже до того, зашедших на вашу страницу.
И тогда вы бы оказать образуют здесь.
После этого форма была представлена пользователем, действие, которое было
указано в формы HTML тега указывало бы на стр. что он
возвращает эти данные для.
>> Так все, что информация будет отправлены обратно к контроллеру.
Тогда вы, вероятно, сделать немного больше Логика на что и, возможно, выполнить несколько
больше запросов в базе данных SQL и вот, наконец, придумать красиво
упакованы набор информации, которую вы бы пройдет в в какую-то другую шаблона
что отображается эту информацию.
Теперь, как мы на самом деле пакет что информация до?
Ну, у нас есть функция под названием Рендер что было в файле functions.php в
pset7, где вы проходите во имя файл, имя шаблона.
>> И тогда вы также проходят в ассоциативный массив.
И так, что ассоциативный массив представляет разная информация
что вы хотите передать дюйма
Теперь, то, что собирается быть постоянным в Эти примеры в том, что ключи, или,
скорее, ключи от ассоциативной массивы, те, что будет
Ожидается, что константа шаблоном, потому что знает, он должен
то, что называется сообщение или называют имя.
А потом вещи о праве, фактические значения, так что в данном случае, кто
хороший мальчик и Мило, те собираются быть значения, которые меняются
что контроллер меняется каждый раз, или на основе определенного состояния и
пройдет, что дюйма
>> Так вот в шаблонах, мы видим, что мы используете HTML специальные символы,
которые просто в основном означает, что мы хотим чтобы получить экспертную строку,
Пользователь вставил
И мы хотим, чтобы заменить сообщение есть.
Итак, когда мы на самом деле смотреть файл, удельный
Информация передается дюйма
Обратите внимание, что ключ, как оказать работ является что ключи ассоциативной
массивы, те становятся переменной имена здесь.
И поэтому значения этого ключа в ассоциативный массив становится
Значение переменной.
>> Теперь давайте перейдем к SQL.
Она выступает за Структурированное Query Language.
И так это просто программирование язык, разработанный
для управления базами данных.
И это пригодилось для нас в наш финансовый сайт pset7.
По сути, это просто легкий способ отслеживать и управлять объекты и таблицы
и соединить их друг с другом.
Теперь, думаю, вашей базы данных SQL в основном в виде файла Excel, пожалуй,
с несколькими вкладками листов.
>> Таким образом, можно иметь несколько таблиц, возможно, что связаны друг с другом.
И так же, как Excel, у нас есть много функциональные возможности, которые мы хотим.
Например, мы можем выбрать определенные строки.
Мы можем вставить информацию.
Мы можем обновлять строки.
И мы можем также удалить вещи.
>> SQL выберите работ выбрав строк или ряд указанных столбцов из
база данных, которая соответствует определенная критерии, которые вы указываете.
Так здесь, когда я вижу SELECT * FROM волшебники, где дом = Равенкло, то
Я выбираю *, который означает, что я выбирая каждый один столбец в том, что
строку из таблицы волшебников, но только тогда, когда столбец дом равна Равенкло.
Теперь, это в чистом виде или SQL.
Так что, если я вошел в PHPmyadmin, что конкретный способ, который мы используем для управления
наши базы данных SQL, то я мог бы вставить что на веб-сайте PHPMyAdmin.
И, что бы выполнить.
>> Но мы на самом деле хотим сделать что на РНР стороне.
Так как же нам это сделать?
Ну, мы используем функцию запроса, который в основном выполняет, что SQL-запрос.
Использование?
в качестве заполнителя, мы можем передать в некоторых значения в нашей строки, что мы
хотите заменить.
Так что, возможно, я храню разные Значения в curr_house, которые
представляет текущий дом что я иду через.
Так я могу передать, что в качестве заполнителя с вопросительным знаком.
И тогда я буду в основном выполнить же самое, что я делал раньше, за исключением того,
сейчас, я в PHP.
>> И запрос вернет ассоциативный массив.
И я собираюсь хранить его в ряды.
Теперь, запрос всегда может потерпеть неудачу.
Возможно, SQL запросов не удалось выполнить потому что таблица не существует.
Или, возможно, в столбце не существует.
Что-то пошло не так.
Ну, в таком случае, вы хотите, чтобы сделать Убедитесь, что вы проверяете ли
запрос вернул ложь.
И вот с помощью тройной равна операцию там.
>> А потом я прошу прощения, что является еще одним Функция CS50, проходя в сообщении.
И если вы посмотрите на извинения, все это действительно является оказание apology.php.
Да.
>> АУДИТОРИЯ: Не могли бы вы объяснить, что это звезда делает между выберите и от?
>> ZAMYLA Чан: Да, абсолютно.
Так звезда между выберите и от означает, что я хочу, чтобы выбрать весь
весь ряд от моего стола.
Я мог бы указано выберите Ф.И.О., год, дом.
И я хотел бы получить только те три столбцы в моем столе.
Но если я говорю SELECT *, то я буду получить все в этом столбце.
Тогда я пойду вам в спину в первую очередь.
>> АУДИТОРИЯ: Так что это еще в SQL, не так ли?
Является ли это запрос или это PHP?
>> ZAMYLA Чан: Мы в запросе.
Так что это в PHP.
Таким образом, используя функцию PHP запрос, мы выполнения SQL запроса.
>> АУДИТОРИЯ: Что-то в SQL с учетом регистра, как выбрать
или мастера или дом?
>> ZAMYLA Чан: Что-нибудь в SQL с учетом регистра?
Я верю в это, да.
Я считаю, что Выберите и одну из и где вводятся с учетом регистра.
Нет?
>> ROB BOWDEN: Так, все наоборот.
Имена столбцов и средства стол, всех тех, с учетом регистра.
Но любой из ключевых слов MySQL, как ВЫБОР, и куда, тем не
с учетом регистра.
ОК.
Таким образом, противоположное тому, что я сказал.
Так все ключевые слова, MySQL -
выбрать, от, где - те, не чувствительны к регистру.
Но все остальное.
ОК.
Вы в передней части.
>> АУДИТОРИЯ: Если я $ строк в терминах более одной строки, значит ли это является
просто становится ассоциативный массив?
>> ZAMYLA Чан: Таким образом, вопрос был если строки имеет более чем одну строку в нем, делает
она стала ассоциативным массивом?
Так что это массив ассоциативных массивы уже.
Таким образом, даже если есть только одна строка вернулся, то вы должны были бы пойти на
индекс 0 из этого результата.
И тогда вам придется, что первый ряд.
Да, Белинда?
>> АУДИТОРИЯ: При использовании ===, это единственный случай?
Или есть другие?
>> ZAMYLA Чан: Так что в этом случае, === сравнение разных типов.
Извините. === Сравнение , который сравнивает типы.
А потом == сравнивает всех типов.
>> АУДИТОРИЯ: Можете ли вы объяснить, что строк в этой ситуации?
Разве строку данных?
>> ZAMYLA Чан: В следующем слайде, я собираюсь объяснить, что строки является.
Так что, если вы не возражаете проведения прочь на что.
И тогда вы в спину?
>> АУДИТОРИЯ: Для функций, таких как запрос, оказать и извиниться [неразборчиво]?
>> ZAMYLA Чан: Вопрос, был ли эти функции - запросов, извиниться,
и сделать -
являются общими для PHP.
Это те, которые CS50 написал для pset7.
И Джей?
>> АУДИТОРИЯ: Когда вам нужно сказать $ _SESSION, Является то, что только для идентификаторов?
Или, может, вы сказали, что здесь?
>> ZAMYLA Чан: Таким образом, вопрос был, когда мы используем $ _SESSION, что был конкретный
глобальная переменная, что мы используем.
Вот эта переменная будет быть локальным для нашей функции.
Так что мы просто объявив новая переменная.
>> АУДИТОРИЯ: Как извиниться реализованы?
>> ZAMYLA Чан: Вопрос был, каким образом извиниться реализованы?
И я думаю, что это на самом деле довольно хорошая практика для вас, ребята, чтобы войти в
секция functions.php и посмотреть на Приносим свои извинения и посмотреть, как вы могли бы
сделано это самостоятельно.
Так что я, возможно, оставлю это для вас, но просто говорят, что если вы посмотрите на свои извинения,
Затем он принимает сообщение, которое вы представлены извиниться, а потом
оказывает это сообщение.
Есть еще вопросы?
Я люблю вопросы.
Так что держите их ждать.
>> АУДИТОРИЯ: [неразборчиво]
эхо или распечатать там?
>> ZAMYLA Чан: Вопрос был, мы могли бы не только поставили
эхо или распечатать там.
Так что сделал бы что-то немного отличается.
Это было бы напечатано запрос не удалось в том, что -
хорошо, прямо сейчас, мы на самом деле в нашем контроллере.
Таким образом, мы на самом деле не имеют HTML настроить здесь.
Apologize путем оказания apologize.php на самом деле перенаправляет вас на apology.php.
ОК.
>> Так что теперь, давайте перейдем к решению Вопрос от ранее о том, что
действительно строк.
Ну, запрос вернет массив строк.
И каждая строка представлена на ассоциативный массив.
Так что, если я исполнил несколько SQL запросов и Я храниться результат в строках, то
используя цикл по каждому элементу, то массив Название является первым там - строки.
И тогда я буду называть каждая строка в там $ подряд.
>> Так итерации, что, я могу доступ столбец имя в данном ряду, в
год колонка, и дом колонка.
Обратите внимание, что я не был бы в состоянии сделать это с рядами, потому что строк индекса
имя не существует.
Строки только массив ассоциативные массивы.
Так у вас есть два уровня там.
Если у вас есть массив строк, вы должны получить на это.
И тогда вы можете получить доступ столбцы.
Разве что дать понять?
Да, перед?
>> АУДИТОРИЯ: [неразборчиво] открыть кронштейны для [неразборчиво]?
>> ZAMYLA Чан: Простите меня?
>> АУДИТОРИЯ: Открытые скобки.
>> ZAMYLA Чан: Они здесь?
Вот что позволило мне включить эта переменная.
Да.
>> АУДИТОРИЯ: При печати, вы печать на HTML кода?
>> ZAMYLA Чан: Да.
При печати, это вот внутри мой шаблон сейчас, так
мой вид метода MVC.
Так что я печати в HTML.
>> АУДИТОРИЯ: Так что, если мы вошли в разработчика инструменты после запуска этого, мы могли бы
что на самом деле в коде?
>> ZAMYLA Чан: Это большой вопрос, да.
Так что если вы вошли в инструменты разработчика в Firefox с помощью Firebug или
Хром, то да, вы могли бы увидеть конкретные HTML.
Так что не будет показывать $ строку ["Имя"].
Было бы показать зависимости от того, зовут в этой строке.
>> АУДИТОРИЯ: Просто общая проблема, какие ПДД и тд определяется как?
Зачем нам [неразборчиво]?
>> ZAMYLA Чан: Строка таблицы тр, Таблица затем т.д столбец.
ОК.
>> АУДИТОРИЯ: Да, это табличные данные.
>> ZAMYLA Чан: данные в таблице.
Да.
>> АУДИТОРИЯ: Это строка, в которой строка трактуется как колонна?
>> ZAMYLA Чан: Извините.
Можете ли вы повторить?
>> АУДИТОРИЯ: Как бы вы визуализировать строк?
>> ZAMYLA Чан: Как бы вы себе строки в какой способ?
Вы говорите о них строк здесь или ТР строк?
>> АУДИТОРИЯ: Строки.
>> ZAMYLA Чан: Эти строки здесь?
Я бы себе это как Я исполню мой запрос.
И это говорит, хорошо, у меня есть либо 0 до п количество строк, которые соответствуют критериям
что вы подверг сомнению.
Поэтому у меня есть некоторое количество строк.
Так строк, то $ ряды, магазины каждый один из тех строк в массиве.
Таким образом, даже если это всего лишь один из них, это еще массив строк, которые соответствуют его.
>> Таким образом, то, например, это похоже на когда вы за уши
кэш от пользователей.
И критерии было где ID равняется идентификатор сеанса.
Там действительно только одна строка , которые могли бы соответствовать.
Но все же строк только что вернулся один ряд.
Таким образом, вы должны были бы пойти на строки, индекс 0, индекс кэша
на самом деле получить в кэш.
>> АУДИТОРИЯ: Является ли функция печати в эхо то же самое?
>> ZAMYLA Чан: Да.
Да.
Распечатать эхо то же самое.
>> АУДИТОРИЯ: Является ли цикл по каждому элементу Единственный способ индекса в ряды?
>> ZAMYLA Чан: Является цикл по каждому элементу единственный способ, которым вы можете
перебора строк?
Нет.
Вы также можете использовать для цикла, при условии, что вы знаете длину
из массива в строки.
>> АУДИТОРИЯ: Не могли бы вы к нему доступ используя строку как [неразборчиво]?
>> ZAMYLA Чан: Таким образом, вы не можете получить к нему доступ только с помощью строки, если у вас нет
цикл по каждому элементу при условии, что Вы не заявили ряд.
Да.
Да, в белом.
>> АУДИТОРИЯ: Так что же тр и тд делать?
>> ZAMYLA Чан: Так тр и TD являются HTML-теги.
тр указывает на начало из строки таблицы.
И каждый тд указывает новый столбец данных таблицы.
>> АУДИТОРИЯ: Для визуального что ряд все равно, что, представьте себе SQL, как
они имеют ряд.
[Неразборчиво].
>> ZAMYLA Чан: Да.
Это отличная точка.
Вы можете визуализировать строк, просто как в таблице Excel, просто
Список строк.
ОК.
Хорошо.
Так что теперь мы перешли выберите, если нет никаких больше вопросов, мы будем
перейти на вставки.
Так что, если я хотел вставить в некоторые стол и вставить определенный столбец
значения, я мог вставить себе в Рейвенкло в год 7.
Но иногда там может быть дубликатом значения, как мы видели в pset7 когда мы
обновляют наш портфель.
>> Таким образом, в этом случае, мы хотим использовать ПО Дубликат ключа UPDATE, так что мы не
хранить несколько строк с тем же ценим, а обновить его.
Тогда у нас действительно есть обновление, который не вставки.
Это просто обновление, где вы обновить в определенном таблицы с заданным
критерии и вот, наконец, удалить, который делает очень похожие вещи.
>> АУДИТОРИЯ: Не могли бы вы кратко перейти дубликата ключа?
>> ZAMYLA Чан: Да.
По существу здесь, у меня есть INSERT INTO Гринготтс, является, галеоны, эти значения.
Но ID, по-видимому, является уникальным ключом значение, установленное в таблице MySQL.
Так что, если я уже, что ID настроить, то я не могу вставить новую строку.
Так что, если он не существует уже, то у меня есть, чтобы обновить его.
В середине в белом.
>> АУДИТОРИЯ: Так вставки, обновления, удаления, и выберите, те все имеющиеся
локально [неразборчиво]?
>> ZAMYLA Чан: Так вставить, обновление, удаление, и
выбрать все запросы SQL.
Поэтому, когда вы используете SQL, вы будете иметь те, которые доступны.
>> АУДИТОРИЯ: Назад в прошлое викторины -
возник вопрос, что имел дело с если вы были стол и хотел
вставить результаты тестов в одном и вставке ваше имя, так что не позволит вам
[Неразборчиво] оценка теста вашего друга.
Как бы вы это сделали с вкладышем?
>> ZAMYLA Чан: Таким образом, вопрос был о предыдущая среднесрочный вопрос.
Я не в курсе из которых один это прямо сейчас.
Поэтому, возможно после этого, если вы хотите придумать и показать мне, то я могу
безусловно, даст вам советы.
Но, говоря о внесении вещей, как принимая чью-то счет, когда вы
не должно, давайте поговорим о Атак с внедрением SQL.
Так атака инъекции SQL, по существу, где кто-то берет
Преимущество низкой безопасности способ, что вы принимаете в данных.
>> Так здесь, как и в CS50 финансов, когда мы вошли в систему, мы можем войти в
имя пользователя в форме входа, первое текстовое поле, и
затем введите в пароле.
Возможно, наш PHP код может выглядеть что-то вроде этого, где $ имя пользователя
является имя пользователя и пароль после данных паролем пост-данных.
А потом мы просто выполнить наш запрос, скажем, Хорошо, хорошо, наш запрос будет
выбрать из наших пользователей, где имя пользователя является
тот, который они представили.
И пароль это пароль, Это означает, что пароли совпадают.
>> Теперь, что если вместо фактически подачи фактический пароль, как
12345 и гадать на зубец, что говорит пароль и пытается взломать их
счет, что, если вместо того, чтобы они представили это.
Они могли бы ввести в возможно догадка паролем.
А потом они бы закончить цитата затем введите или 1 = 1.
Это было бы ходить непосредственно в SQL запрашивать смотреть что-то вроде этого.
Выберите из пользователей, где имя пользователя = зубцы и пароль
равна лилии или 1 = 1.
>> Так что либо пароль имеет чтобы быть правильным или 1 = 1,
который всегда верно.
Таким образом, в этом случае, в основном, пользователь может воспользоваться этим и просто войти
сами в и хак чей-то счет.
Так вот почему мы хотим избежать кто-то необходимости делать это.
Но, к счастью, функция запроса на переходя в заполнителей состоится
уход за это для вас.
Кроме того, вы не будете обычно не хочу на самом деле представить пароли
сами.
Вот почему мы хэшируется или зашифрованы их в CS50 финансов.
>> АУДИТОРИЯ: Прошлое викторины говорили о побеге строки MySQL.
Есть ли у нас беспокоиться об этом?
>> ZAMYLA Чан: Это хороший вопрос.
Управляющие строки MySQL, безусловно, функция, которая использовалась в нашем запросе.
Но определенно смотреть на это.
Я бы сказал, что это честная игра, чтобы знать что вам нужно позвонить, что
функционировать на строку.
Да, Белинда?
>> АУДИТОРИЯ: Как вы знаете, когда это одинарные кавычки или двойные кавычки?
А также, я чувствую, что в лекции вы упомянул что-то о не имеющих
[неразборчиво] или что-то или Второй сингл цитатой в конце.
Я думаю, что он указал в лекции, что вы должны иметь апостроф 1
а потом не иметь апострофы или что-то.
>> АУДИТОРИЯ: [неразборчиво].
>> АУДИТОРИЯ: Дело в том, последний сингл цитата там в этом втором окне
там быть не должно.
[Неразборчиво]
Потому что, когда вы берете, что последний сингл цитирую, и они совпадают на содержание
где пароль, если у вас есть, что запрос, есть одинарные кавычки в
конец уже.
Вы хотите использовать этот одинарные кавычки как тот, который обращен к одному
[Неразборчиво].
Так что на самом деле в этом тексте коробка не должна иметь, что.
>> ZAMYLA Чан: Я буду изменить эту ситуацию.
ОК.
Если нет никаких вопросов, то я буду передать его на Иосифу говорить
о JavaScript, и так далее.
>> [Аплодисменты]
>> ИОСИФ ОНГ: Так мы бежим немного позади.
Так что если у вас есть, чтобы уйти, это нормально.
Но мы просим, ​​чтобы вы храните ваши головы вниз если вы находитесь в середине, так что вы
не блокируют камеру и использовании назад выход, если вам придется.
Я Иосиф кстати.
Привет.
Тест, тест.
Дэн, это хорошо?
Круто.
>> Таким образом, видео также будут размещены онлайн для тех, кто
должны уйти сейчас.
Неуклюжий.
ОК.
Так викторины отзыв.
Это кошка.
Теперь, JavaScript, который, может быть, не как AWW для некоторых из вас, ребята.
ОК.
Так вот сначала, помните из Zamyla.
Помните, что PHP является выполняются на сервере.
И много раз, вы, ребята, писал петли в PHP распечатать HTML, верно?
Поэтому, как только что код выполняется, что HTML выход Вам распечатать
отправляется пользователю.
И как только это произойдет, не более PHP может быть запущен, если вы не перезагрузите страницу, из
Курс, который повторно выполняет на PHP.
Но как только вы распечатать этой HTML, вы не можете пойти куда угодно.
>> Так что HTML посылается к пользователю, что браузер здесь, где
Мило использует компьютер.
И так хорошо, есть несколько вещей, как только мы посылаем HTML для пользователя.
Иногда мы хотим сделать что-то вроде при нажатии на что-то, мы хотим
оповещения коробки всплывал, те виды взаимодействия, как при нажатии
клавиша при нажатии что-то на страницы, я хочу чтобы что-то произошло.
Ну, вы не можете повторно выполнить PHP Код раз, что HTML установлен.
Итак, как вы это делаете?
>> Введем новый язык под названием JavaScript, который работает в браузере
что позволяет делать вещи в HTML после получения
их с сервера.
И именно поэтому мы называем это на стороне клиента язык программирования.
Он работает на вашем компьютере -
клиент.
Любые вопросы о том, что до сих пор?
Эта парадигма имеет смысл для людей?
ОК.
Хорошо.
Таким образом, первое, что нужно отметить, является JavaScript не PHP.
>> У них есть немного другой синтаксис, которые мы пойдем в.
И у них есть очень разные применения.
JavaScript, опять же, для вашего браузер, для клиента.
Сервер работает где-то на чужой компьютер, который посылает информацию
Вам, правильно?
Так что, если мы просим вас написать PHP код на вопрос экзамен, не пишите
JavaScript, и наоборот.
Вы просто потеряете очки, и это не будет правильно.
>> Итак, давайте в некоторые синтаксические различия -
JavaScript слева и PHP справа.
Первое, что вы заметите, с JavaScript, мы объявляем переменные с
вар ключевое слово -
В-А-Р. PHP используется знак доллара, как Zamyla обсуждалось ранее.
Если вы хотите объявить ассоциативную Массив, мы видим знакомую синтаксисом
правая сторона с PHP.
На левой стороне, а не Вы использовать фигурные скобки.
И тогда ваши ключи слева.
Тогда у вас есть двоеточие.
И тогда у вас есть значения что вы хотите.
>> Так что это, как вы могли бы сделать это в PHP на правой стороне с этой второй
строка, которая начинается на Майло.
И это, как вы могли бы сделать это на Левая сторона в JavaScript, если вы хотите
что мы называем объект.
И объекты в JavaScript являются всего ассоциативные массивы.
Так что если вы хотите получить доступ к полям, в PHP вы используете этот синтаксис кронштейн.
И таким образом, вы можете переназначить этот владелец поле с Лорен.
>> Ну, в JavaScript, если хотите доступ к полю и изменить его, вы можете
использовать синтаксис с точкой.
Вы также можете использовать синтаксис кронштейн.
Но вы не можете использовать Синтаксис точка в PHP.
Это не будет работать.
Она работает только в PHP.
И, наконец, распечатать вещи Консоль, вы используете console.log, который
вы, ребята используют много в pset8.
Вы можете console.log что.
>> Если вы хотите напечатать массив в PHP, вы должны использовать печать р.
И на правой стороне, вы видите, я хэш объединение строк там.
Кто-то спросил ранее.
Я использую плюс в JavaScript.
Если я хочу объединить что-то в PHP, я использую точку.
Они отличаются.
Если вы пишете PHP код, не используйте в плюс.
Если вы пишете наличие Код, не пишите точку.
Это будет неправильно.
И вы будете грустить.
>> Так синтаксические различия.
Знай своего синтаксиса, потому что, если у вас есть, чтобы написать вопрос, и вы использовать синтаксис
от непонятном языке, он не будет работать.
И это будет не так.
Итак, давайте поговорим о некоторых контроля течь различия, как вы используете
петель в каждом из них.
Zamyla подошел с правой стороны.
Материал на правой стороне должны быть знакомы.
Давайте посмотрим на на левой стороне.
>> При использовании для п петли в JavaScript, ваша переменная цикла, переменная я там,
цикл по ключей массива.
Итак, вы видите имя, дом, и роль.
Если я console.log I, я получаю имя, дом, и роль.
Те, ключи.
В JavaScript, цикл по каждому элементу идет по значениям этого массива.
Таким образом, вы заметите, что они оба я.
Но здесь на PHP стороне, он печатает из Мило, CS50, и Талисман.
Таковы значения в PHP.
>> Так что это, как эти два отличаются на разных языках.
Так что если вы используете Еогеасп цикл, не думайте, что это
дает вам ключи.
И, если вы используете для н петли, не Предположим, что это дает вам значения.
Имеет ли это смысл до сих пор?
На следующем слайде собирается показать вам, как вы можете получить доступ противоположное в
каждого из них.
>> Ну, если у вас есть ключ в JavaScript и вы хотите, чтобы значение вне,
вы просто индекс в Массив с этим.
Так Мило я получу вам, что Вы хотите - значения.
Там эта другой синтаксис в PHP.
Если вы действительно хотите знать, я не думаю, что мы показали его вам еще.
Но если вам интересно, вы можете использовать этот дополнительный синтаксис справа
сторона, которая на самом деле позволяют получить Ключи в PHP, когда вы используете
цикл по каждому элементу.
Так что просто немного мелочи если вы заинтересованы.
>> Так вот просто, чтобы продемонстрировать Различия между этими двумя петлями.
Не смешивайте их, когда вы программирование вопрос.
Любые вопросы о том, что.
Круто.
Хорошо.
JavaScript объекты.
Я говорил о них.
Они как ассоциативные массивы.
Единственное, что я хотел бы обратить Ваше внимание в том, что значение в ассоциативной
Массив может быть что угодно в JavaScript.
>> Он даже может быть функцией, как там.
У меня есть функция, что это значение ключа.
И если я хочу назвать эту функцию, Я просто доступ кору.
А потом я положил скобки после этого.
И это работает.
Поэтому любые вопросы?
Нет?
ОК.
Хорошо.
JavaScript, как PHP, свободно набрали.
Что это значит?
>> У него есть виды.
Но когда вы объявляете наличие переменная, вы говорите вар я.
Вы не говорите это.
Это не вещь.
Вы просто сказать, что это переменная.
А потом JavaScript будет обрабатывать типы под капотом для вас.
Мы можем свободно конвертировать между типы из-за этого.
Так что я начинается как числа в этом случае.
А потом меня есть строка.
И я добавить я ему.
И я переназначить его обратно в I.
>> Так что на этой первой линии, я это число.
На второй строчке, я теперь становится строка после я делаю переназначение.
И вот, я просто объединения что число на строке.
Итак, вы видите, что даже при том, что я был целое число в первой части, это своего рода
вроде были преобразованы в строка, а затем добавляются
на что Привет строки.
И вот что я имею в виду по рыхлой печатать.
Вот, что вы конвертировать между типы очень легко.
И это не бросает предупреждения на вас, как Си делает.
>> Так что я теперь содержит привет 123 к строке.
Следующая.
Мы также можем свободно сравнить между типами.
Так что если вы просто используете ==, очень как в PHP, JavaScript
делает подобную вещь.
Строка 123 такое же, как количество 123 при использовании двойных равных.
При использовании тройные равных, он также хочет, чтобы убедиться, что
Тип такой же.
Так потому, что это строка, и это ряд, хотя они оба
123, при использовании тройной равно, вы получаете ложное.
В двойной равна случай, вы получите истинное, потому двойные равно не
заботятся о типа.
Трехместный равно делает волнует типа.
Вопросы?
ОК.
>> И еще о JavaScript является Сфера отчасти глобальная, если вы не
в функции.
И это работает так же, способ в PHP на самом деле.
Так давайте пройдем этом примере.
Я сете я до 999.
А потом я иду в этот цикл.
Так что, если я печатаю я в это для цикл, я ожидаю, 0, 1, 2, 3, 4.
Я получаю г = 4.
Это увеличивает я теперь до 5 в конец для петли.
А потом он ломает из петли, потому что это не соответствует
состояние больше.
>> Что вы думаете, что в следующем console.log печатает?
Так вот что он будет делать на C. В C, потому что, если у вас есть, как вар я вне
и у вас есть уаг I внутри цикла, как цикл, то это делает его таким образом, что
это область видимости, что два я 'различны.
В JavaScript, он просто будет рассматривать его как равно я.
Я получаю 5, потому что это было значение когда она выходила из петли.
Так те, которые я являются одинаковыми я.
Имеет ли это смысл?
>> Ну, это имеет смысл с точка зрения JavaScript.
Но то же самое парадигма не переносятся на C. Они имеют
различные правила области.
Да.
>> АУДИТОРИЯ: [неразборчиво]
вне функции [неразборчиво]?
>> ИОСИФ ОНГ: Так, за пределами которой функция?
Так что я доберусь до этого всего за секунду.
Так мы называем Foo (я).
Это проходит, я в Фу, приращения это, а затем регистрирует его.
Так было 5.
Так он становится 6.
Но то, что я говорю о том, что я в этой функции.
Потому что это параметр, это ограничивается только этим функции.
Поэтому, как только я на самом деле выйти из этого Функция, то теперь будет идти
вернуться к старому I.
Это я только в области видимости, потому что это находится в функции.
И у нас есть объем и функции.
Но мы не имеем сферу за пределами функций в JavaScript.
Имеет ли это смысл?
Да.
Вопрос.
>> АУДИТОРИЯ: То же [неразборчиво]?
>> ИОСИФ ОНГ: Так что да.
В PHP, это тот же самый тип вещи.
Там в небольшой тонкость фактически.
Но вы можете спросить меня о что после обзора.
Вы действительно не нужно знать что тонкость для викторины.
Для всех намерений и целей, как переменные, глобальные и PHP, если
они находятся в зависимости, такой же вещь в JavaScript.
Да.
>> АУДИТОРИЯ: Почему это позволило в JavaScript и не где еще?
>> ИОСИФ ОНГ: Так почему же это позволило в JavaScript, а не в С?
Это просто тот, кто придумал JavaScript решил, что это было в порядке в
JavaScript.
Так что это просто, как язык программирования Конвенция как мы сказали бы.
Да.
>> АУДИТОРИЯ: Так почему же это пойти от 6 до 5?
>> ИОСИФ ОНГ: Так продолжалось от 6 до 5, потому что, когда я прошел I в Foo, что
я внутри Foo теперь в области видимости Foo, потому сфера существует в функции в
JavaScript.
Но как только я выйду отсюда, потому что это был в области видимости функции, я просто
с использованием регулярных I, который был внутри остальная часть потока управления.
Смысл?
Могу ли я двигаться дальше?
Хорошо.
Круто.
>> Принятие это объекты передаются по ссылке.
Вы знаете, как, когда вы проходите массив в C вы могли
на самом деле изменить массив?
Это то же самое в JavaScript.
Если бы я передать объект, в данном случае, я прошло Майло в эту функцию catify.
Мило начинается.
Его зовут Мило Банан.
Я передать этот объект в функцию потому что это объект, ассоциативная
Массив в JavaScript.
>> Когда я выполнить операцию в этой функции, он будет
на самом деле изменить объект.
Так что это произойдет только для объектов в JavaScript, так же, как это происходит
для массивов внутри имени С. Так что Майло на самом деле станет кошка сейчас.
Имеет ли это смысл?
Так это работает только для объектов.
Объекты передаются по ссылке.
Да.
>> АУДИТОРИЯ: Так вы говорите, что в отличие от переменной I.
>> ИОСИФ ОНГ: Да.
Какие переменной я был просто ряд, не так ли?
Это как в C, когда вы проходите целое, он делает копию.
И когда вы передать массив, на самом деле изменяется фактическое массив в
С. То же самое происходит с JavaScript в этом случае.
Хорошо.
А рядом, Майло грустно, потому что он теперь кошка.
Это было на самом деле Мило после некоторые поездки к ветеринару.
>> Так как мы используем наличие на веб-странице?
Мы можем включить его.
Это HTML код с тегами полосы.
Так что у меня теги Газа.
А потом я ставлю некоторые наличие Код в тегах сценария.
А потом он выполняет это.
Когда я только сделать это так, что это называется встроенный JavaScript.
Это своего рода грязным, потому что JavaScript на самом деле в HTML.
>> Лучший способ сделать это, гораздо приятнее, это написать свой наличие в
внешний файл, а затем предоставить тег скрипт с источником.
И это пойдет на этот файл JavaScript и прочитать код JavaScript с
что файл вместо.
И таким образом, вы не должны много JavaScript в начале вашего
HTML файл, что делает это действительно грязно.
Вы просто положить его где-то в другом месте.
А потом он будет читать его оттуда.
Разве в этом есть смысл?
>> Вопросы размещения.
В данном конкретном случае Сценарий до тела.
Поэтому, когда я исполняю, что есть ничего в организме еще.
Может быть, это сделает немного больше чувствую, когда я показываю эту следующую часть.
В этом случае сценарий приходит после див.
Поэтому на самом деле появится дел на странице в первую очередь.
Прямо здесь, в этой маленькой красной окружностью, вы видите отображается текст.
И тогда тревога появляется.
>> В первом случае, потому что сценарий было до DIV,
предупреждение появляется в первую очередь.
И тогда дел появляется после закрытия окна.
Таким образом, исполнение имеет значение.
Таким образом мы будем иметь это в виду.
Это будет важно в немного.
ОК.
Так хорошо, как не вы подождите, пока вся страница загружается, то перед вами
выполнять некоторый код?
Мы войдем в это немного Чуть позже тоже.
Но просто держать это место размещения вопросы в виду, когда мы
прийти на другой слайд.
>> Итак, мы получаем, чтобы DOM теперь.
А что такое DOM?
Так что, если вы посмотрите на HTML кода, это просто куча текста на экране.
Так как же JavaScript знаем, что это HTML элемент?
Таким образом, мы должны иметь некоторый объем памяти представление этого
структура, которая у нас есть.
И всякий раз, когда у нас есть это в памяти представительство в JavaScript, мы называем
что DOM.
И это всего лишь способ, которым люди решили что мы должны представить это
Структура HTML как.
>> И что же это DOM выглядит?
Ну, в представлении памяти, мы берем этот текст.
И мы превратить его в памяти представление.
Так что это HTML.
Таким образом, мы впервые узнали, что каждый ДОМ дерево имеет документ.
Это выглядит как дерево.
И документ содержит HTML тег, на самом деле все
внутри это сейчас.
HTML тегов имеет двоих детей.
Он имеет голову.
Это голова, если вы посмотрите на отступ там, как она структурирована
между закрывающим тегами, головка имеет ребенка.
Ребенок название.
Именно так.
>> Теперь у нас есть тела ребенка.
А потом, что тело имеет ребенок называется семьей.
И, что семья имеет троих детей -
Старейший, средний и младший.
Таким образом, вы должны знать, как нарисовать схему как это, когда мы просим вас, как
нарисовать диаграмму, когда мы даем Вы HTML слева.
Знать, как произвести DOM дерево.
А внутри этих вещей, есть только некоторый текст, который я представлял
как маленькие коробочки.
>> Делает ли это DOM дерево структура смысл и то, что DOM является?
Итак, что же р означает?
Сюда, стр. там в этом теге представляет
тег пункт в HTML.
Таким образом, вы можете посмотреть его.
Но это просто означает, что это некоторые пространство для некоторого текста.
И у него есть CSS стиль по умолчанию, потому что это пункт тег.
Но на самом деле не беспокоиться о что часть слишком много.
Просто знаю, что это заполнитель в течение некоторого текста.
Да.
Вопрос?
Да.
>> АУДИТОРИЯ: Вы только что упомянули CSS.
Семья хэш и хэш все это добро в основном
представляющих идентификаторов в CSS?
>> ИОСИФ ОНГ: Да, именно так.
Я вернусь к какой эти хэши значит в секунду.
Когда Анжела подошла CSS, она говорили о CSS селекторов.
Таковы CSS селекторы, что она говорит.
Да, Роб?
>> ROB BOWDEN: Я хотел бы также прокомментировать что DOM внутри тег заголовка
также текстовый узел.
>> ИОСИФ ОНГ: Верно.
Так внутри тег заголовка, У меня есть текстовый DOM.
Так на самом деле, это название должно быть как маленькая коробочка сходит его также.
Но это не имеет большого значения слишком много в данном случае.
Мы действительно не заботятся о текстовых узлов, как мы их называем, слишком много.
Хорошо, что мы делаем.
Судя по всему, что мы делаем.
И я буду это исправить, когда Я загрузить его снова.
Имеет ли это смысл?
>> Так как же мы работаем с DOM?
Всякий раз, когда вы имеете дело с DOM в JavaScript, есть два шага.
Вы выбираете DOM элемент.
А потом вы делаете вещи к нему.
Таким образом, в этом случае, абстрактно, у меня выбран средний элемент.
А потом пример делать вещи к нему будет изменение текста.
Это раньше Боб.
Теперь, что сделал Я с ним был я изменил Боб Майло в этом случае.
>> Так как же мы на самом деле это сделать?
Как мы это делаем выбора?
И как мы делаем вещи, чтобы вещь, как только мы взяли это?
Ну, то, как вы, ребята узнали его в этом классе является использование то, что мы
называется JQuery.
Так что же такое JQuery?
JQuery это библиотека, которая делает JavaScript легче писать.
Значит, кто-то нашел время, и написал JQuery.
>> JQuery на самом деле написано в JavaScript.
А потом, потому что они сделали это, мы теперь есть целая куча функций,
мы можем использовать, что сделать наш живет очень просто.
Так что некоторые из вещи она делает?
Это делает выбора элементов легче.
Это делает изменения HTML, добавления классов легче.
Это делает Аякс легче.
Мы вернемся к этому в секунду.
>> И это аналогично C библиотек.
Таким образом, вы включают string.h, вы получаете STRLEN.
Вы получаете зЬгсру, все эти вещи.
При включении JQuery, вы получаете хороший способа выбора элементов на изменение
вещи, и так далее.
Вы получаете дополнительную функциональность, что JavaScript не дает вам.
Так JQuery не JavaScript.
JQuery это библиотека, которая написана в JavaScript, что делает наличие
легче писать.
>> Так JQuery не программирование язык.
Но в JavaScript является.
сделать.
Конечно, вы получите вашу терминологию прав.
Есть вопросы?
Да.
Это вопрос?
Хорошо.
Так как же вы используете JQuery?
Ну, когда вы пишете некоторые JavaScript код и включить
JQuery в верхней части вашего файла в виде файл сценария, можно использовать знак доллара
сейчас, чтобы получить доступ к JQuery.
И это отличается от знак доллара в PHP.
>> Это такой же символ вам печатать на клавиатуре.
Но они имеют в виду совершенно разные вещи.
Знак доллара в PHP означает, что этот как я объявить переменную.
В JavaScript, когда вы включили JQuery, он выступает за JQuery.
Так что имейте это в виду.
Итак, как мы могли бы выбрать элементы DOM?
Ну, а когда вы делаете это уродливое наличие образом, вы получаете доступ к
документировать глобальной переменной.
И тогда вы получите элемент, ID семьи.
Это действительно долго и многословно и не очень хороший.
>> Или вы можете получить все элементы которые являются р тегов.
Это тоже работает в JavaScript.
Но мы никогда не показал Вы синтаксис слишком много.
То, что мы показали вам было JQuery.
Так что вся селектор вверх там, что была выражена в JavaScript просто получает
конденсируется в этот очень хороший доллара подписать хэштэг семью.
И $ р, там, где это так.
Если вы хотите выбрать все р теги внутри семьи, мы поставить пробел
между ними.
А теперь, мы получаем все р теги внутри семьи.
>> И выглядит знакомым?
Ну, Анжела говорили о CSS селекторы.
Дайте мне одну секунду.
И поэтому для того, чтобы выбрать элемент, вы просто используете то же самое, как вы
будет делать с селектором CSS.
Если поставить хэш перед об этом, он выбирает по ID.
Точка выбирает по классам.
Если вы просто иметь дело, не хэши или точки, он выбирает эти теги.
Вопросы.
Да?
>> АУДИТОРИЯ: Когда мы используем точку в нашем HTML, является то, что не JQuery?
>> ИОСИФ ОНГ: Dot в нашем HTML это вещь JavaScript.
Это не вещь JQuery.
То, как вы, ребята узнали его с JQuery является использование. HTML.
И тогда вы передали его все HTML будет.
Так что я доберусь до этого всего второй на самом деле.
Так как же нам делать такие вещи, к элементу как только мы выбрали его?
Так вот пример выбора элемента.
Так что теперь, мы хотим делать вещи к нему.
>> Таким образом, в этом случае, позвольте мне вернуться к предыдущему слайду.
Это был Боб раньше.
И я хочу, чтобы изменить это внутри HTML к Майло.
Так что я вызвать функцию HTML от элемента.
Это HTML функция Способ элемента.
А потом я даю ему, что Я хочу, чтобы HTML, чтобы быть.
И это как раз заменяет, что внутри что тег с тем, что я даю ему.
Да.
Вопрос?
>> АУДИТОРИЯ: хэштег используется только для JQuery.
[Неразборчиво]
мы бы не использовать это.
>> ИОСИФ ОНГ: Да, именно так.
Но не волнуйтесь слишком много о чистой JavaScript.
Я просто хочу, чтобы вы, ребята, чтобы сосредоточиться на том, как вы бы сделать это с JQuery, потому
что будет важно часть на викторине.
Верно.
Именно так.
Итак, вы видите, что хэштэг, так что соответствует выбрать элемент с
ID среднего из-за этого хэштегом.
Hashtag означает ID.
И этот элемент имеет идентификатор середине.
Так вот элемент мы выбираем.
>> АУДИТОРИЯ: [неразборчиво].
знак доллара хэштег [неразборчиво]?
>> ИОСИФ ОНГ: Так нет.
Вопрос вы можете использовать. Значение.
И значение. Работает только на элементах что являются входами.
В JQuery, было бы . Вал, не значение..
Так что я доберусь до небольшого примера, что демонстрирует все это в сочетании
в секунду.
Но я думаю, что это служит небольшой отрывок имеет смысл для людей, до сих пор.
Хотите изменить HTML, вызвать метод HTML.
Да.
>> АУДИТОРИЯ: Можете ли вы объяснить снова метод?
>> ИОСИФ ОНГ: Так метод просто функция, которая принадлежит к одному, в этом
так, один из этих DOM элементов, потому что вы видите I
первый выбранный элемент.
На самом деле, позвольте мне использовать мышь.
Я выбрал элемент в первую очередь.
И тогда я назвал эту HTML функционировать, что это было.
И потому, что эта функция принадлежит эта вещь, мы называем это метод.
Это просто красивое название для него.
Сказать, что снова.
Так что помните, мы выбрали элемент теперь.
И мы ввели его внутри переменная элемент.
Исправьте?
>> Поэтому, когда мы хотим изменить HTML на внутри, потому что это было Боб и прежде, вы
хотите изменить этот текст, чтобы Майло.
Так мы называем HTML.
И мы сказать ему, что HTML внутри что элемент должен быть сейчас.
И так он меняет его на Мило, потому что я дал ему Майло.
>> АУДИТОРИЯ: Так они работают вместе.
[Неразборчиво]
>> ИОСИФ ОНГ: Да, да.
Они работают вместе.
Так один из них выбирает элемент в первую очередь.
И второй делает что-то есть.
Да.
>> АУДИТОРИЯ: [неразборчиво].
Если этот метод отличается от в HTML у вас есть метод равного актуальной.
>> ИОСИФ ОНГ: Да.
Это другой способ.
И мы можем покрыть, что через секунду когда мы доберемся до примера.
Я хочу убедиться, что мы ускорить потому что мы мало времени.
Но мы запускаем путь в течение долгого времени теперь.
ОК.
Круто.
Так что если вы хотите добавить класс, есть также метод добавить класс.
Это просто пример того, что вы можете сделать с JQuery.
Это просто добавляет класс.
>> Если вы хотите, чтобы удалить его, вы можете позвонить удалить.
Вот только еще одна вещь, вы можете сделать.
Так больше примеров того, что вы можете сделать.
Так я могу просто положить его на верхняя, как это?
Самый молодой удалить.
Если я просто выполнить этот наличие в верхняя часть моего файла, будет, что работает?
Верно.
Потому что средний пока не существует.
Так что это не будет работать.
Порядок выполнения.
Само в начало первого.
Что?
>> АУДИТОРИЯ: Самый молодой еще не существует?
>> ИОСИФ ОНГ: Да.
Самый молодой еще не существует.
Именно так.
>> АУДИТОРИЯ: Вы сказали, средний.
>> ИОСИФ ОНГ: Извините.
Самый молодой еще не существует.
И другое дело, у меня нет включали JQuery
подать спросить сценария SRC.
Так что не собирается работать.
На самом деле, я не делал, что в Следующий слайд, который является
предполагается зафиксировать, что либо.
Но то, как мы делаем это JavaScript приводится событие.
Так что мы делаем, мы используем событие манипулятора, чтобы это произошло.
И поэтому я выберите документ установить в первую очередь.
Я говорю, хорошо, когда документ готовы, позвольте мне выполнить функцию.
Так вот все, что синтаксические средства.
>> Я выбрал этот документ.
Теперь, когда документ готов, запустить функцию.
И так здесь, когда документ готов, который означает, что все HTML имеет
загружен, то я запустить функцию который удаляет этот элемент.
И вот теперь, когда я запускаю эту функцию что я перешел в готов, я
Гарантируется, что все HTML на страница будет существовать в первую очередь.
Да.
Вопрос?
>> АУДИТОРИЯ: Что такое ключевое слово событие внутри функции?
>> ИОСИФ ОНГ: Так что ключевое слово событием в функция просто является параметром, который
передается в функцию для любого события.
Это просто то, что Вы получаете бесплатно.
При использовании ключевых обработчики в pset8, что событие может сказать вам, для
Например, ключ, который вы нажали на.
В этом случае для готового случае это на самом деле не супер полезно.
Но для ключевого вниз случае, это больше полезно, потому что вы получите знать, какие
Ключевые вы нажали путем доступа ключ Код от этого объекта события.
Исправьте?
Имеет ли это смысл?
ОК.
Да.
Вопрос?
>> АУДИТОРИЯ: Так вы можете положить тег сценария пониже?
>> ИОСИФ ОНГ: Так что да.
Вы можете поместить сценарий пометить пониже.
Но тогда он просто становится действительно грязно.
И мы хотели бы централизовать все нашего кода в одном месте.
И это позволит нам это сделать.
Помните раньше я сказал, что есть более хороший способ гарантировать, что элементы
на странице, прежде чем выполнять код?
И это просто хороший способ вы бы добиться этого.
>> АУДИТОРИЯ: [неразборчиво].
>> ИОСИФ ОНГ: Да.
Вы все равно пришлось бы, верно?
Потому что помните, что вы включены подать в верхней части страницы.
Так он собирается выполнить, прежде чем Вы добираетесь до нижней части страницы.
ОК.
Таким образом, вы также можете добавить другое тип обработчика событий.
Это один просто обрабатывает щелчки.
Когда я нажимаю на молодой, то он будет всплывающее окно с предупреждением.
Это просто другой Тип события.
В отличие от готового случае, теперь использовать событие щелчка, когда вы получаете
щелкает на элементе.
>> И поэтому в данном случае, помните, щелчок обработчик присоединяется к молодым.
Так бывает только тогда, когда Я нажимаю на молодой.
И в другом, готового случае был прикреплен к документу.
Так что ждет документа быть готовым.
Смысл?
Я думаю, что я могу двигаться дальше.
Да.
Вопрос?
>> АУДИТОРИЯ: [неразборчиво].
в данном случае вы используете [неразборчиво].
>> ИОСИФ ОНГ: О, да, потому что в этом так, я должен ждать для самых маленьких
элемент появляться на экране сначала прежде чем я смогу приложить обработчик щелчка, чтобы
это, и именно поэтому я ставлю его в о наличии документа готов.
ОК.
А рядом, так что это большой пример как бы вы совместить все.
Это всего лишь пример проверки формы вы видели в лекции.
Так что берите его шаг за шагом, как вы идете через это.
И это будет полностью в порядке.
Просто прочитайте его сверху донизу.
>> У меня есть форма в нижней части.
Когда документ будет готов, я придаю представить обработчик в форму таким образом, чтобы
когда я отправить форму, я получаю значения внутри каждого из этих входов.
И я проверить, если это пустой.
Если это пустой, я вернуться ложным, потому что Я не хочу, чтобы отправить форму,
потому что форма не так.
Если пароль пустой или это менее более восьми символов, я не представить
форма, потому что это тоже неправильно.
И возвращение ложных всего мешает форма от представления и
собирается на новую страницу.
>> И будем надеяться, что это имеет смысл.
Я думаю, что вы, ребята, должны ходить через этот код шаг за шагом по своему усмотрению.
И как только вы понимаете, что выбрать элементы и делать такие вещи, к нему
на самом деле влечет за собой, это сделает много смысла для вас.
Да?
>> АУДИТОРИЯ: При чем тут имя = имя пользователя в виду?
>> ИОСИФ ОНГ: Таким образом, название = имя пользователя и Имя = пароль просто означает смотреть на
атрибутом все Вы выбираете.
А потом, что должен соответствовать.
Так мы идем в регистрации.
А потом мы смотрим на всех входах и регистрация.
А потом мы выбираем тот, где имя атрибут равна имени пользователя.
Так что первый селектор выбирает только Имя пользователя ввода.
И, что второй селектор выбирает только пароль один, потому что те, у
их атрибуты имя установить как то, что они должны быть.
Вопрос?
>> АУДИТОРИЯ: На представления, как же Нижняя часть решения верхнюю часть?
>> ИОСИФ ОНГ: Так это потому, что обработчика событий.
Таким образом, мы ждали события отправки что увольняют из формы.
И это все, что представить.
Почему я называю представить там?
Это говорит, когда форма была отправлена, Я получаю представить событие.
Итак, позвольте мне просто перехватить, что и затем запустить вместо этого кода.
Да?
>> АУДИТОРИЯ: Почему у вас иметь функцию событие?
Почему ты не можешь просто [неразборчиво]?
>> ИОСИФ ОНГ: Потому что в JavaScript, вы должны объявить функции.
Вот только как это работает в JavaScript.
Вы должны сказать, что это собирается запустить функцию.
Так ты говоришь это, что вы ожидая функцию здесь вместо
всего фигурные скобки.
>> АУДИТОРИЯ: А функция является то, что из этого следует?
>> ИОСИФ ОНГ: Да.
Функция все, что внутри фигурные скобки после
что функция ключевым словам.
Да?
>> АУДИТОРИЯ: [неразборчиво].
>> ИОСИФ ОНГ: Для представить?
>> АУДИТОРИЯ: Нет, для функции без события.
>> ИОСИФ ОНГ: Да.
Так что без случае, вы можете иметь это.
Если вам не нужно событие, то вы можете просто опускаем.
Но если вы делаете, то вы просто положить его там.
Да.
Быстрый вопрос?
>> АУДИТОРИЯ: [неразборчиво].
>> ИОСИФ ОНГ: Да.
Потому что то, что вам нужно сделать,, document.ready просто говорит ждать все
HTML на странице, чтобы сначала загрузить.
И, как правило, вы хотите, чтобы ваши элементы на месте, прежде чем запускать любой код.
Хорошо.
Мы должны добраться до Ajax.
Мы не так уж много времени.
Так плюсы и минусы.
JavaScript легче попробовать писать с JQuery.
Но JQuery является отчасти медленным.
>> Это как PHP работает медленнее, чем C, потому что это интерпретируется.
И JQuery немного медленнее, чем JavaScript, потому что это делает много
вещи под капотом.
И так, если вы используете JQuery, это только немного медленнее, чем
JavaScript, хотя и дает хороший элегантность.
И, наконец, Аякс.
До сих пор с Ajax, вы еще не видели Ajax с точки зрения pset7 еще и потому,
когда вы делаете, вы представить форма для цитаты.
Он загружает новую страницу.
Таким образом, вы получите эту большую белую вспышку на странице в то время как
вторая страница загружается, правильно?
>> Было бы очень хорошо, если вам не было этой вспышки.
Как Facebook, если вы просто выделите нижняя, он добавляет новый контент
без обновления всей страницы.
Так что-то вроде этого было бы хорошо.
Это код JavaScript на левой стороне.
Вы получите то, что находится внутри этого входа.
Вы получаете фондовый информацию от Yahoo!
А потом вы делаете большой строку, говорит, хорошо, это послание, которое я хочу
показать на экране.
И тогда вы положить, что сообщение внутри некоторого HTML элемента, который получает
отображается на экране.
>> Так что все, что здесь происходит.
Так в основном, потому что это все JavaScript и вам не нужно запускать
больше PHP, это будет убедиться, что страница не обновляется.
Так что это просто абстрактная идея что я говорю здесь сейчас.
Абстрактной идеей является то, что если вы делаете это все в JavaScript, вы не должны
обновления страницы.
Но как вы на самом деле это сделать?
>> Ну, на самом деле, давайте поговорим о Проблема с этим в первую очередь.
Проблема в том, в JavaScript, выполнение является синхронным.
Таким образом, вы должны ждать одного линия закончить перед вами
выполнить следующую строку.
А что, если я собираюсь к Yahoo!, и их серверы очень медленно, и
им требуется три секунды, чтобы отдай мне, что фондовый информации?
Когда я ударил, что цена линии, если выполнение является синхронным, как это по
по умолчанию, что это просто собираюсь сделать, это Ваш браузер собирается тянуть
три секунды.
И вы не собираетесь быть в состоянии сделать ничего пока он получает эти данные.
Это собирается быть заморожены.
>> И это плохо.
Вы же не хотите, чтобы пользователь иметь замороженный веб-страницы.
Исправьте?
Вот только плохо.
Все согласны с тем?
Если вы просматриваете Facebook и его замерзает, и вы ничего не можете сделать, вы
получить действительно разочарованы.
Таким образом, решение мы сделать что-то асинхронный вместо этого.
Так что все это асинхронный вещь говорит есть, я собираюсь спросить это
URL для некоторых данных.
А потом я собираюсь продолжать идти.
Я просто хочу, чтобы держать выполнения любой код, который был после этого.
>> А потом, когда, что данные готовы, тогда я буду обрабатывать его.
Это все, что говорит.
>> АУДИТОРИЯ: Аякс просто делает Код асинхронный?
>> ИОСИФ ОНГ: Это асинхронный способ выборки данных.
Поэтому первое, что о Ajax это позволяет мне получить данные
от внешнего сайта.
И второе это гарантирует, что моя страница не остановится, пока я
извлечения этих данных.
Это асинхронная частью.
Потому что он идет где-то в другом месте, потому что я говорю, я продолжаю на время
это извлечение этих данных, что делает его асинхронный.
Я держу выполнения.
>> Так держать, что асинхронный Идея в виду.
И я покажу вам, что разница.
Синхронный версия находится на левой стороне.
Асинхронная версия находится на правой стороне.
Посмотрите на цифры, чтобы увидеть, какие шаги соответствуют тому, что
выполняет на каждой строке.
Вон там, предупреждение появляется в первую очередь.
Потому что получение изображения Информация от Yahoo!
занимает три секунды, это киосков в течение трех секунд.
А потом он предупреждает цену после этих трех секунд.
>> Так вот, это оповещения шоу до в то время -
три секунды дюйма
А потом он предупреждает по после этого.
Так что просто идет шаг за шагом.
Это как то, что вы, ребята, примет, правильно?
С асинхронного выполнения, Вы предупредить в первую очередь.
Тогда вы уходите по следующему адресу.
А вы говорите, что я собираюсь просто попросите данных.
А потом я собираюсь обработать его позже.
Так что немедленно выполняет Следующая строка после того как я сделать это
Асинхронный запрос.
>> Таким образом, 0,001 секунд, вы видите предупреждение привет.
Выполнить эту функцию, оповещения до свидания.
И потому, что я дал обещание, что я бы обрабатывать данные позже, чем
происходит, когда эти данные возвращается через три секунды, то я бегу, что
функция, которая у меня есть там.
Да?
>> АУДИТОРИЯ: Не могли бы вы указать или уточнить, что означает Аякс?
>> ИОСИФ ОНГ: Так Аякс это способ, что если я нужны данные, когда я на сайте и я
не хочу, чтобы обновить страницу, то Я использую эту технологию под названием Ajax.
Это по существу только означает, пойди, принеси данные из другой веб-сайт.
И сделать это таким образом, что только не заглохнет мою веб-страницу.
>> АУДИТОРИЯ: Так это то, что присуще часть JavaScript или JQuery?
>> ИОСИФ ОНГ: Значит, кто-то написал способ сделать это в JavaScript давным-давно.
В какой-то момент, она не существует.
И таким образом, кто-то изобрел эту технику чтобы позволить людям, чтобы просить эти данные
таким образом.
И они написали некоторые вещи чтобы сделать это за вас.
И JQuery просто дает вам это Очень хороший способ сделать это
с этим $. получить функцию.
вопросы?
Я могу ответить на вопросы о Аякс потом тоже.
Я буду здесь.
>> Так что давайте нам получить данные без обновить страницу.
И это давайте нам сделать это в асинхронный способ, которым
не замерзает страницу.
Слишком долго, не читал, если это Объяснение было слишком долго для вас.
Итак, наконец, межсайтовый сценариев атак.
Мы видели это с Zamyla.
Если в моем кого-то базы данных имеет это имя, что этот сценарий тег, и я
есть код на моей странице, которая печатает из имен людей в ряд, или у меня есть
некоторый код JavaScript, который вставляет это имя в страницу,
что HTML получает производится?
Ну, я распечатать HTML тег.
Я распечатать все эти теги.
>> Я добраться до части, где я печать с моими друзьями.
Распечатать Лорен вне.
Это печать Майло вне.
А потом мое имя в базе данных является сценарий сообщение
нелестно статус Facebook.
Потому что я вставил это в странице потому что это похоже JavaScript, когда
эту страницу отправляется пользователю, он запускается на выполнение, как JavaScript.
И так это то, что мы называем межсайтовый скриптинг атаки.
Кто-то ставит вредоносный информацию в Ваша база данных, которые могли бы соответствовать
некоторые дополнительные строки или некоторая строка JavaScript.
>> И когда он получает выводится на страницы таким образом, то, что
происходит то, что плохой код запускается на выполнение что я не намерен
для того, чтобы получить выполнен.
И это все, межсайтовый сценариев атаки.
И то, как вы обойти это как Zamyla сказал.
Вы просто обернуть вещи в HTML специальные символы.
И это HTML специальные символы является PHP функция, которая позволит предотвратить такого рода
вещи из происходит с вами если у вас есть злонамеренный
строка в базе данных.
Это просто избегает его, так что это не так интерпретируются как HTML.
Он заменяет маленькие скобки с тем, что мы называем объекты.
И мы пошли по этому в лекции тоже.
Поэтому я думаю, вы, ребята, должны иметь хорошее представление о том, что.
Вопросы?
Да.
>> АУДИТОРИЯ: Итак, как бы [неразборчиво]?
>> ИОСИФ ОНГ: Сказать, что снова.
>> АУДИТОРИЯ: Как бы монитор -
>> ИОСИФ ОНГ: Верно.
Так у вас есть что-то, что говорит, когда Зарегистрироваться, тип на мое имя.
Я просто наберите в этой области, меня зовут сняли сообщение нелестные Facebook
Статус близко тег сценария.
И это просто получает введен в В базе, потому что я не могу сказать, что кто-то
в мире не есть имя с левой стрелкой в ​​нем или
Слово сценарий в нем.
Это на самом деле не имеет смысла.
Так что я просто должны убедиться, что я санировать материал прежде, чем я распечатать его
к этой странице.
>> АУДИТОРИЯ: Так специальные карточки HTML предотвращает теги сценария?
>> ИОСИФ ОНГ: Да.
Так это не мешает теги сценария.
Это просто гарантирует, что теги сценария не получают
интерпретируется как HTML или -
да.
Это просто придумывает, как то, что есть на самом деле.
Хорошо.
Так, чтобы был обзор викторины.
Круто.
>> [Аплодисменты]