Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Как научиться читать любой код за 30 минут

Как научиться читать любой код за 30 минут

Григорий Петров (Voximplant) @ Python Junior Meetup № 2

"Максимально просто расскажу о том, как выглядит текст программы на любом языке программирования с точки зрения самого языка программирования. Вы узнаете про expression’ы и statement’ы, про страшную штуку evaluate, про то, что английский язык учить придется, и много других интересных штук".

Moscow Python Meetup
PRO

April 13, 2017
Tweet

More Decks by Moscow Python Meetup

Other Decks in Education

Transcript

  1. Григорий Петров
    Как научиться читать любой код
    Voximplant
    Python Junior Meetup №2, Москва, 04.2017
    https://twitter.com/grigoryvp

    View Slide

  2. Что сейчас будет?
    Рассказывает Григорий Петров
    Специализация Руководство разработкой
    Чем занимается Технический евангелист
    Опыт Более 15 лет
    Время выступления 30 минут... надеюсь
    Вопросы В конце выступления
    2

    View Slide

  3. В предыдущих сериях
    a = 1
    переменные - это возможность называть штуки
    3

    View Slide

  4. В предыдущих сериях
    a = 1
    переменные - это возможность называть штуки
    с целью обращаться по имени
    4

    View Slide

  5. В предыдущих сериях
    a = 1
    переменные - это возможность называть штуки
    с целью обращаться по имени
    и переназывать
    5

    View Slide

  6. Что такое программа?
    6

    View Slide

  7. Что такое программа?
    Инструкция, написанная на языке
    7

    View Slide

  8. Что такое программа?
    Инструкция, написанная на языке
    8

    View Slide

  9. Что такое язык?
    9

    View Slide

  10. Что такое язык?
    1. Кучка именованных штук
    2. Правила, что с ними делать
    10

    View Slide

  11. Что такое язык?
    1. Кучка именованных штук
    2. Правила, что с ними делать
    ● Грамматика
    ○ Синтаксис
    ○ Морфология
    ● Орфография
    ○ Пунктуация
    ○ Правописание
    11

    View Slide

  12. Что такое язык?
    1. Кучка именованных штук
    2. Правила, что с ними делать
    ● Грамматика
    ○ Синтаксис
    ○ Морфология
    ● Орфография
    ○ Пунктуация
    ○ Правописание
    12

    View Slide

  13. Синтаксис
    13

    View Slide

  14. Синтаксис
    1. разбить текст на именованные штуки
    14

    View Slide

  15. Синтаксис
    1. разбить текст на именованные штуки
    2. применить правила
    15

    View Slide

  16. Синтаксис
    мама мыла раму
    16

    View Slide

  17. Синтаксис
    мама мыла раму
    субъект объект
    действие
    разделител
    ь
    разделител
    ь
    17

    View Slide

  18. Синтаксис
    母は窓を洗いました
    18

    View Slide

  19. Синтаксис
    母は窓を洗いました
    флаг субъекта флаг объекта прошедшее время
    субъект объект действие
    19

    View Slide

  20. Языки программирования
    a = 1
    20

    View Slide

  21. Языки программирования
    a = 1
    идентификатор числовой литерал
    оператор связи
    21

    View Slide

  22. 22

    View Slide

  23. 23

    View Slide

  24. В реальности - вот так :)
    (('-%s' if order else '%s') % column_name)
    24

    View Slide

  25. Но есть несложные правила
    (('-%s'_if_order_else_'%s')_%_column_name)
    пробелы
    парные кавычки
    25

    View Slide

  26. Но есть несложные правила
    (('-%s' if order else '%s') % column_name)
    но не в кавычках
    спецсимволы, парные скобки
    26

    View Slide

  27. Итого:
    (('-%s' if order else '%s') % column_name)
    27

    View Slide

  28. Итого:
    ( )
    ( ) )
    '-%s' '%s' )
    % )
    if order else column_name)
    28

    View Slide

  29. А затем магия:
    1. Кусочки берутся слева направо
    29

    View Slide

  30. А затем магия:
    1. Кусочки берутся слева направо
    2. Для каждого выполняется evaluate ...
    30

    View Slide

  31. А затем магия:
    1. Кусочки берутся слева направо
    2. Для каждого выполняется evaluate ...
    3. ... в соответствии с приоритетом
    31

    View Slide

  32. А затем магия:
    1. Кусочки берутся слева направо
    2. Для каждого выполняется evaluate ...
    3. ... в соответствии с приоритетом
    начнем с него
    32

    View Slide

  33. Evaluate
    штука value
    значение
    evaluate
    33

    View Slide

  34. Evaluate
    штука value
    значение
    evaluate
    текст программы байты в памяти
    выполнение программы
    34

    View Slide

  35. Evaluate
    штука value
    значение
    evaluate
    текст программы байты в памяти
    Сейчас уже нет, а в LISP'е и раньше нет, но
    так очень удобно для понимания :)
    выполнение программы
    35

    View Slide

  36. Пример!
    1 1
    evaluate
    number literal number value
    36

    View Slide

  37. Пример!
    "привет" 'привет'
    evaluate
    string literal string value
    37

    View Slide

  38. Пример!
    нет, разница не в кавычках :)
    38

    View Slide

  39. Пример!
    1 == 2 False
    evaluate
    conditional expression boolean value
    39

    View Slide

  40. Когда у нас несколько кусочков
    ... то это compound expression :)
    1 == 2
    40

    View Slide

  41. Когда у нас несколько кусочков
    они могут использовать значения друг друга
    1 == 2
    41

    View Slide

  42. Когда у нас несколько кусочков
    они могут использовать значения друг друга
    1 == 2
    низкий приоритет
    эвалуейтится в конце
    42

    View Slide

  43. Когда у нас несколько кусочков
    они могут использовать значения друг друга
    1 == 2
    низкий приоритет
    эвалуейтится в конце
    43

    View Slide

  44. Когда у нас несколько кусочков
    они могут использовать значения друг друга
    1 == 2
    использует результат
    evaluate слева и справа
    44

    View Slide

  45. Когда у нас несколько кусочков
    они могут использовать значения друг друга
    поэтому работают вот такие конструкции:
    user.pics.last() == User.pics.MAIN
    lvalue rvalue
    45

    View Slide

  46. Лево и право. Affinity
    1 + 2 + 1 1 +
    both affinity right affinity нет :)
    46

    View Slide

  47. Лево и право. Affinity
    1 + 2 + 1 foo()
    both affinity right affinity есть
    47

    View Slide

  48. Side-effects
    Лисперы в печали
    side-effect:
    вывод в консоль
    результат evaluate:
    число символов
    48

    View Slide

  49. Какие бывают кусочки
    49

    View Slide

  50. Какие бывают кусочки
    ● минимальный кусочек - это expression
    50

    View Slide

  51. Какие бывают кусочки
    ● минимальный кусочек - это expression
    ○ если сам по себе - то literal expression
    51

    View Slide

  52. Какие бывают кусочки
    ● минимальный кусочек - это expression
    ○ если сам по себе - то literal expression
    ○ если использует слева/справа - то compound
    52

    View Slide

  53. Какие бывают кусочки
    ● минимальный кусочек - это expression
    ○ если сам по себе - то literal expression
    ○ если использует слева/справа - то compound
    ■ если делает переменную, то assignment
    53

    View Slide

  54. Какие бывают кусочки
    ● минимальный кусочек - это expression
    ○ если сам по себе - то literal expression
    ○ если использует слева/справа - то compound
    ■ если делает переменную, то assignment
    ■ если проверяет, то conditional
    54

    View Slide

  55. Какие бывают кусочки
    ● минимальный кусочек - это expression
    ○ если сам по себе - то literal expression
    ○ если использует слева/справа - то compound
    ■ если делает переменную, то assignment
    ■ если проверяет, то conditional
    ■ если считает, то arithmetic
    55

    View Slide

  56. Какие бывают кусочки
    ● минимальный кусочек - это expression
    ○ если сам по себе - то literal expression
    ○ если использует слева/справа - то compound
    ■ если делает переменную, то assignment
    ■ если проверяет, то conditional
    ■ если считает, то arithmetic
    ■ ...
    56

    View Slide

  57. Какие бывают кусочки
    ● минимальный кусочек - это expression
    ○ если сам по себе - то literal expression
    ○ если использует слева/справа - то compound
    ■ если делает переменную, то assignment
    ■ если проверяет, то conditional
    ■ если считает, то arithmetic
    ■ ...
    ● специальный кусочек - это statement
    57

    View Slide

  58. Какие бывают кусочки
    ● минимальный кусочек - это expression
    ○ если сам по себе - то literal expression
    ○ если использует слева/справа - то compound
    ■ если делает переменную, то assignment
    ■ если проверяет, то conditional
    ■ если считает, то arithmetic
    ■ ...
    ● специальный кусочек - это statement
    потому что спецсимволов не хватило
    58

    View Slide

  59. Statement - костыль синтаксиса
    Когда не хватает спецсимволов...
    мы придумываем спецсинтаксис!
    59

    View Slide

  60. Statement - костыль синтаксиса
    Когда не хватает спецсимволов...
    мы придумываем спецсинтаксис!
    В лиспе, кстати,
    символов хватило.
    Скобочки там для всего
    60

    View Slide

  61. Statement как он есть
    foo = (v) => v * 2 def foo(v):
    return v * 2
    61

    View Slide

  62. Statement как он есть
    foo = (v) => v * 2 def foo(v):\n
    __return v * 2
    function definition
    operator, ака
    "толстая стрелка"
    function definition
    statement, ака
    "синтаксис python"
    62

    View Slide

  63. Statement как он есть
    foo = (v) => v * 2 def foo(v):\n
    __return v * 2
    function definition
    operator, ака
    "толстая стрелка"
    function definition
    statement, ака
    "синтаксис python"
    63

    View Slide

  64. Что такое "operator"?
    Обычно так называют спецсимволы
    64

    View Slide

  65. Что такое "operator"?
    Обычно так называют спецсимволы
    ... и части statement вроде "return"
    65

    View Slide

  66. Что такое "operator"?
    Обычно так называют спецсимволы
    ... и части statement вроде "return"
    В сложных отношениях с expression
    66

    View Slide

  67. Что такое "operator"?
    Обычно так называют спецсимволы
    ... и части statement вроде "return"
    В сложных отношениях с expression
    left и right affinity - это обычно про них
    67

    View Slide

  68. Что такое "operator"?
    Обычно так называют спецсимволы
    ... и части statement вроде "return"
    В сложных отношениях с expression
    left и right affinity - это обычно про них
    Приоритет - тоже обычно про них
    68

    View Slide

  69. Что такое "operator"?
    Обычно так называют спецсимволы
    ... и части statement вроде "return"
    В сложных отношениях с expression
    left и right affinity - это обычно про них
    Приоритет - тоже обычно про них
    69

    View Slide

  70. Вернемся к магии
    1. Кусочки берутся слева направо
    2. Для каждого выполняется evaluate ...
    3. ... в соответствии с приоритетом
    готово!
    70

    View Slide

  71. Вернемся к магии
    1. Кусочки берутся слева направо
    2. Для каждого выполняется evaluate ...
    3. ... в соответствии с приоритетом
    теперь - о приоритетах
    71

    View Slide

  72. Operator precedence
    72

    View Slide

  73. Operator precedence
    ( )
    ( ) )
    '-%s' '%s' )
    % )
    if order else column_name)
    1 1
    73

    View Slide

  74. Operator precedence
    ( )
    ( ) )
    '-%s' '%s' )
    % )
    if order else column_name)
    2 2
    74

    View Slide

  75. Operator precedence
    ( )
    ( ) )
    '-%s' '%s' )
    % )
    if order else column_name)
    3 3
    75

    View Slide

  76. Operator precedence
    ( )
    ( ) )
    '-%s' '%s' )
    % )
    if order else column_name)
    3 3
    4
    5 6
    76

    View Slide

  77. Operator precedence
    ( )
    ( '-%s' или '%s' ) )
    )
    % )
    column_name)
    7
    8
    77

    View Slide

  78. Итого
    (('-%s' if order else '%s') % column_name)
    -column_name или column_name
    78

    View Slide

  79. Но помните:
    Прочитать - не значит понять :)
    79

    View Slide

  80. Это всё!
    Вопросы?
    Григорий Петров
    [email protected]
    https://twitter.com/grigoryvp
    https://facebook.com/grigoryvp
    80

    View Slide