Результат: ученик проектирует статические методы с одной ответственностью, явными зависимостями и контрактами, выбирает канал результата и понимает разрешение перегрузок и способы передачи аргументов.

Содержание:

  1. Объявлять и вызывать метод

    • возвращаемый тип;
    • имя метода;
    • параметры и их типы;
    • аргументы вызова;
    • тело и return;
    • void для действия без возвращаемого значения;
    • локальное состояние отдельного вызова.
  2. Разделять вычисление и представление

    • чистый вычисляющий метод;
    • метод с наблюдаемым побочным эффектом;
    • отсутствие консольного ввода-вывода в вычислительном ядре;
    • композиция результатов нескольких методов;
    • одна ответственность вместо случайного деления по числу строк.
  3. Понимать сигнатуру и перегрузку

    • имя, число параметров, их типы и способы передачи;
    • возвращаемый тип не различает перегрузки;
    • имена параметров не создают новую сигнатуру;
    • выбор наиболее подходящей перегрузки;
    • допустимые неявные преобразования;
    • неоднозначный вызов и его устранение.
  4. Использовать именованные и необязательные аргументы

    • связывание аргумента по имени;
    • изменение порядка именованных аргументов;
    • обязательные параметры перед необязательными;
    • значение по умолчанию, известное вызывающему коду;
    • сохранение понятного и однозначного API.
  5. Проследить передачу по значению

    • копия значения аргумента в параметре;
    • независимое изменение параметра значимого типа;
    • локальная замена параметра;
    • сохранение переменной вызывающего кода;
    • продолжение этих правил для ссылок, подробно изучаемое в Разделе 16.
  6. Выбирать out, ref и in

    • out для обязательного присваивания выходного результата;
    • ref для чтения и изменения существующей переменной вызывающего кода;
    • in для передачи без переприсваивания параметра;
    • требования к переменной в месте вызова;
    • отличие нескольких выходов от скрытого глобального состояния.
  7. Возвращать несколько связанных значений

    • именованный кортеж;
    • доступ по именам и ItemN;
    • деконструкция;
    • отбрасывание элемента через _;
    • выбор между кортежем, несколькими out и будущим собственным типом.
  8. Проектировать контракт метода

    • предусловия;
    • постусловия;
    • побочные эффекты;
    • изменяемые аргументы;
    • поведение при недопустимом входе;
    • согласованность всех выходных значений.
  9. Использовать контракт Try...

    • результат bool как признак успеха;
    • выходные параметры только как согласованный результат;
    • определённое значение out на каждом пути;
    • ожидаемый неуспех без исключения;
    • разделение проверки и дальнейшего вычисления.
  10. Строить процедурный API

    • минимальное число взаимно согласованных операций;
    • явный поток данных между методами;
    • отсутствие глобального изменяемого состояния;
    • одинаковая терминология в именах;
    • независимая проверяемость каждого вычисляющего метода.