Russian subtitles

← 02-11 Использование процедур

Get Embed Code
8 Languages

Showing Revision 3 created 08/01/2014 by Fran Ontanaya.

  1. К сожалению, у нас пока нет особых поводов для радости.
  2. Себастьян говорит, что пройдет еще несколько лет, прежде чем у меня появится
  3. свой собственный беспилотный автомобиль, но главная проблема в том,
  4. что мы еще не поговорили о том, как использовать процедуры.
  5. Мы всего лишь научились создавать их; пока мы не сможем их использовать,
  6. у нас не будет веской причины для радости.
  7. Мы вскоре научимся ими пользоваться и снова сможем широченно улыбаться.
  8. А сейчас мы собственно и узнаем, как использовать процедуру.
  9. Для этого нам понадобится <имя процедуры>, за которым следует
  10. открывающая скобка и список <входных данных>.
  11. В принципе их может быть сколько угодно, но их количество должно совпадать с
  12. тем, что ожидает процедура.
  13. Эти входные данные иногда называются «операндами».
  14. А иногда – «аргументами».
  15. Мы не будем спорить, что правильнее.
  16. Мы просто будем называть их входными данными.
  17. Вообще-то вы уже использовали похожую запись.
  18. Еще в разделе 1 вы узнали, как использовать метод find() строковых переменных.
  19. В find() передаются один или два входа.
  20. Первый – это строка.
  21. Строка, которую вы ищете – это первый параметр,
  22. а необязательный второй – это целое число, позиция, с которой нужно начать
  23. поиск данной строки.
  24. В лекциях раздела 1 мы нашли множество применений методу find(), а вы закрепили эти знания,
  25. выполняя домашнюю работу.
  26. find() слегка отличается от процедур, которые вы определяете самостоятельно.
  27. Во-первых, он встроен в язык.
  28. Во-вторых, помимо уже упомянутых, у нас есть
  29. еще один вход – вот этот.
  30. У нас есть строка, в которой мы осуществляем поиск – к примеру,
  31. переменная page – которая по сути является просто еще одним входом.
  32. Позже мы поговорим о том, чем отличается такая запись, но в целом она
  33. очень похожа на вызов процедуры, у которой один параметр находится здесь,
  34. а остальные два – вот здесь.
  35. Есть и отличия, но в этом разделе мы не будем на них останавливаться,
  36. однако в дальнейшем вы узнаете, что на самом деле происходит при вызове метода.
  37. У процедур, которые вы объявляете самостоятельно, нет
  38. объекта, от имени которого они вызываются.
  39. Есть только сама процедура и ее аргументы, или операнды, или входы –
  40. как вам больше нравится – которые передаются в нее.
  41. Посмотрим, как это работает, на примере простой процедуры.
  42. Я определю процедуру rest_of_string(), и мы снабдим ее
  43. параметром s; это значит, что у нее один вход и мы будем обращаться к
  44. его значению через имя s.
  45. Мы заставим ее возвращать все символы строки от первой [не нулевой!] позиции до ее конца.
  46. Для этого мы будем использовать оператор индексации строк – return s[1:].
  47. Это даст нам ту же строку без первой буквы, то есть все символы
  48. от позиции 1 до конца строки.
  49. Вот их мы и вернем.
  50. Итак, на выходе rest_of_string() будет новая строка, начинающаяся
  51. со второй буквы входной строки.
  52. Вот пример использования этой процедуры.
  53. Мы можем вызвать ее напрямую.
  54. Мы можем написать print rest_of_string.
  55. Это наша процедура.
  56. Теперь нужно поставить открывающую скобку и передать в нее входное значение.
  57. У rest_of_string() один параметр, так что нам понадобится передать в нее
  58. одно значение, и оно должно быть строкой.
  59. Мы передадим в процедуру строку 'audacity'.
  60. Когда мы вызываем процедуру, контроль переходит
  61. к телу процедуры.
  62. Мы можем представить, что сейчас делает интерпретатор.
  63. Вместо выполнения кода, интерпретатор сделает переход.
  64. Когда мы вызовем процедуру, он перейдет к выполнению кода внутри нее.
  65. Он присвоит параметрам поданные на вход значения.
  66. Мы можем представить это как операцию присваивания, которая присваивает s
  67. переданное в процедуру входное значение.
  68. Теперь нам нужно выполнить тело процедуры.
  69. В данном случае оно состоит из одной команды – вот этой команды return.
  70. Нам нужно вычислить это значение, s[1:].
  71. Оно будет равно строке 'udacity'.
  72. Теперь перехойдем к команде return.
  73. return означает, что мы переходим обратно.
  74. Мы возвращаемся к месту вызова процедуры, но уже
  75. с его результатом.
  76. Когда мы переходим обратно, значение вызова становится равным значению,
  77. которое мы вернули.
  78. В данном случае это строка 'udacity'.
  79. Итак, у нас пока нет собственной машины-беспилотника,
  80. но теперь вы умеете определять и использовать процедуры.
  81. Это очень мощная концепция.
  82. Все, чем мы будем заниматься в рамках этого курса, как и деятельность
  83. практически любого компьютерного программиста сводится к определению
  84. процедур и их использованию.
  85. А теперь у нас должна появиться широкая улыбка.
  86. Мы можем думать о процедурах как о коде, преобразующем входные данные в выходные.
  87. Мы также можем думать о людях как о существах, занимающихся тем же самым.
  88. У нас есть входные значения, поступающие через глаза, через
  89. рот – наверное, даже через нос.
  90. Я не буду пытаться изобразить выходные данные человека-процедуры, но раз уж
  91. процедуры играют настолько важную роль, мы посвятим им несколько
  92. следующих заданий, чтобы убедиться, что вы хорошо их понимаете.