Telegram Group & Telegram Channel
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



group-telegram.com/R4marketing/1327
Create:
Last Update:

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

BY R4marketing | канал Алексея Селезнёва | Язык R




Share with your friend now:
group-telegram.com/R4marketing/1327

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

Ukrainian President Volodymyr Zelensky said in a video message on Tuesday that Ukrainian forces "destroy the invaders wherever we can." Ukrainian forces successfully attacked Russian vehicles in the capital city of Kyiv thanks to a public tip made through the encrypted messaging app Telegram, Ukraine's top law-enforcement agency said on Tuesday. Individual messages can be fully encrypted. But the user has to turn on that function. It's not automatic, as it is on Signal and WhatsApp. Now safely in France with his spouse and three of his children, Kliuchnikov scrolls through Telegram to learn about the devastation happening in his home country. The perpetrators use various names to carry out the investment scams. They may also impersonate or clone licensed capital market intermediaries by using the names, logos, credentials, websites and other details of the legitimate entities to promote the illegal schemes.
from sg


Telegram R4marketing | канал Алексея Селезнёва | Язык R
FROM American