Типизация в Ruby

НАВИГАЦИЯ ПО СТРАНИЦЕ

Статическая и Динамическая Инструменты типизации в Ruby

Ruby относится к языкам программирования с динамической типизацией, что означает, что типы переменных определяются во время выполнения программы.

Статическая и Динамическая Типизация

  1. Динамическая Типизация в Ruby

    В Ruby переменные не имеют явного типа, и их тип может изменяться во время выполнения программы. Например:

    x = 5      # Integer
    x = "Hello" # String
  2. Статическая Типизация

    Статическая типизация, наоборот, подразумевает определение типов переменных на этапе компиляции, и они не могут изменяться в процессе выполнения программы. Пример на языке с статической типизацией (например, Java):

    int x = 5;
    x = "Hello"; // Ошибка компиляции

Инструменты типизации в Ruby

  1. Type Checking с Ruby Type Checker (RBS)

    RBS — это формальная система аннотаций типов для Ruby, которая предоставляет средства для проверки типов во время выполнения.

    Пример использования RBS:

    # typed: strict
    class MyClass
      extend T::Sig
    
      sig { params(x: Integer, y: Integer).returns(Integer) }
      def add(x, y)
        x + y
      end
    end
  2. Strong Params в Rails

    В Rails, использование "strong parameters" — это практика, направленная на защиту от массового присвоения (mass assignment) в контроллерах:

    def create
      @user = User.new(user_params)
      # ...
    end
    
    private
    
    def user_params
      params.require(:user).permit(:name, :email)
    end
  3. Документация с типами (YARD с типами)

    YARD — это инструмент для генерации документации Ruby. С аннотациями типов он может помочь улучшить читаемость документации:

    # @param [Integer] x
    # @param [Integer] y
    # @return [Integer] The sum of x and y.
    def add(x, y)
      x + y
    end
  4. Rack::Types в Sinatra

    В Sinatra, вы можете использовать Rack::Types для проверки и преобразования параметров запроса:

    require 'sinatra'
    require 'rack/types'
    
    get '/:id' do
      id = params['id'].assert! { |id| Integer(id) > 0 }
      "Valid ID: #{id}"
    end

Ruby, будучи языком с динамической типизацией, предоставляет также инструменты и практики для улучшения безопасности кода и его документирования. Выбор между динамической и статической типизацией зависит от требований проекта и личных предпочтений разработчиков.