S7 0.2.0: Новый стандарт ООП в R
S7 — это гибкий и мощный инструмент для объектно-ориентированного программирования в R, предлагающий строгость S4 и простоту S3. Новая версия 0.2.0 усиливает производительность, вводит улучшенную совместимость с S3 и добавляет гибкие валидаторы. Проектирование и реализация S7 были совместными усилиями рабочей группы из R Consortium , включая представителей R-Core, Bioconductor, tidyverse/Posit, ROpenSci и более широкого сообщества R. В будущем разработчики планируют интеграцию S7 в базовый R.
Установите пакет, чтобы попробовать новый подход к ООП:
install.packages("S7")
Основные возможности S7
1. Создание классов
S7 позволяет определять классы с четкими типами свойств. Для обеспечения корректности данных можно использовать валидаторы.
Пример:
Range <- new_class("Range",
properties = list(
start = class_double,
end = class_double
),
validator = function(self) {
if (length(self@start) != 1) {
"@start must be length 1"
} else if (length(self@end) != 1) {
"@end must be length 1"
} else if (self@end < self@start) {
"@end must be greater than or equal to @start"
}
}
)
# Создаем корректный объект
valid_range <- new_object(Range, start = 1, end = 10)
print(valid_range)
# Проверка с некорректными данными
tryCatch(
new_object(Range, start = 10, end = 5),
error = function(e) message("Ошибка: ", e$message)
)
2. Создание методов
Методы создаются через обобщенные функции (
new_generic()
). Это упрощает настройку поведения для различных классов.
Пример:
greeting <- new_generic("greeting", function(x) NULL)
method(greeting, Range) <- function(x) {
paste("Диапазон начинается с", x@start, "и заканчивается", x@end)
}
greeting(valid_range) # Диапазон начинается с 1 и заканчивается 10
3. Совместимость с S3
S7 интегрируется с S3-методами, что облегчает переход на новую систему. Например, можно использовать существующие S3-классы как базовые.
4. Наследование классов
Создание иерархий классов позволяет расширять возможности базового класса.
Пример:
Employee <- new_class("Employee", parent = Range, properties = list(
name = class_character
))
worker <- Employee(start = 9, end = 18, name = "Jane")
print(worker)
Производительность и планы на будущее
S7 разработан с учетом высокой производительности: проверки свойств реализованы на уровне C, что делает его подходящим для обработки больших объемов данных. В будущем планируется включить поддержку S7-классов в базовый R, что сделает их стандартом.
Почему стоит использовать S7?
Простота: Создание классов и методов не сложнее, чем в S3.
Надежность: Строгая типизация предотвращает ошибки.
Универсальность: Подходит для создания библиотек, построения API и работы с данными.
Ссылки:
●
S7 0.2.0 (eng)
Так же про ООП в R
●
ООП в языке R (часть 1): S3 классы
●
ООП в языке R (часть 2): R6 классы
#новости_и_релизы_по_R