Типизация в Ruby
НАВИГАЦИЯ ПО СТРАНИЦЕ
Ruby относится к языкам программирования с динамической типизацией, что означает, что типы переменных определяются во время выполнения программы.
Статическая и Динамическая Типизация
Динамическая Типизация в Ruby
В Ruby переменные не имеют явного типа, и их тип может изменяться во время выполнения программы. Например:
x = 5 # Integer x = "Hello" # String
Статическая Типизация
Статическая типизация, наоборот, подразумевает определение типов переменных на этапе компиляции, и они не могут изменяться в процессе выполнения программы. Пример на языке с статической типизацией (например, Java):
int x = 5; x = "Hello"; // Ошибка компиляции
Инструменты типизации в Ruby
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
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
Документация с типами (YARD с типами)
YARD — это инструмент для генерации документации Ruby. С аннотациями типов он может помочь улучшить читаемость документации:
# @param [Integer] x # @param [Integer] y # @return [Integer] The sum of x and y. def add(x, y) x + y end
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, будучи языком с динамической типизацией, предоставляет также инструменты и практики для улучшения безопасности кода и его документирования. Выбор между динамической и статической типизацией зависит от требований проекта и личных предпочтений разработчиков.