Size: a a a

2020 January 26

VV

V V in pro.lua
Lucky Ook
нее, оно прикольно, но это же кукушечкой поехать можно отлаживая такое.
Что именно? ООП? Или его какие-то части?

Или даже таблицы с методами table:function(self,...) - это плохо и некошерно?
источник

m

mihacooper in pro.lua
Ничего специфического для инкапсуляции не использую
источник

VV

V V in pro.lua
mihacooper
Я наследование использую в lua
А как именно? Метатаблицы к метатаблицам?
источник

VV

V V in pro.lua
mihacooper
Ничего специфического для инкапсуляции не использую
Просто данные внутри, никак не пряча?
источник

m

mihacooper in pro.lua
V V
А как именно? Метатаблицы к метатаблицам?
Да, на метатаблицах
источник

S

Snusmumriken in pro.lua
V V
О том и речь) кто какие способы реализации использует.

Кому-то private нужен? Если да, то как используете? Protected? Тот же вопрос)

Например, наследование кому-то хоть раз в луа пригодилось? Или, может, потребовалось настолько, что вы сами вручную его реализовывали?
Private и protected — объективно особо не особо нужны, но если прям требуются — локальные переменные внутри модуля, фактически upvalue:
*module.lua*
local bar = 300 --< типа private

local M = {}
function M.foo(v)
 return v + bar
end

return M

Делать прям приватные поля конкретных объектов — несколько сложнее и нужны извращения, но тоже можно теми же upvalue.
источник

S

Snusmumriken in pro.lua
Наследование — полезное. Но только до определённой глубины, пока оно влезает в твою голову. На практике — 2-3 уровня наследования — максимум.
источник

LO

Lucky Ook in pro.lua
V V
Что именно? ООП? Или его какие-то части?

Или даже таблицы с методами table:function(self,...) - это плохо и некошерно?
Таблицы - торт. Речь про ООП во всей его академической замороченности.
источник

m

mihacooper in pro.lua
V V
Просто данные внутри, никак не пряча?
Не прячу. Не нужно это, если нет "типа", то все это бессмысленно)
источник

m

mihacooper in pro.lua
Snusmumriken
Private и protected — объективно особо не особо нужны, но если прям требуются — локальные переменные внутри модуля, фактически upvalue:
*module.lua*
local bar = 300 --< типа private

local M = {}
function M.foo(v)
 return v + bar
end

return M

Делать прям приватные поля конкретных объектов — несколько сложнее и нужны извращения, но тоже можно теми же upvalue.
Согласен
источник

VV

V V in pro.lua
mihacooper
Не прячу. Не нужно это, если нет "типа", то все это бессмысленно)
Эм, чего именно нет?)
источник

m

mihacooper in pro.lua
V V
Эм, чего именно нет?)
Ну нет системы типов как в статических языках. Статичкой проверки интерфейсов,  доступности полей, и т.п.
источник

S

Snusmumriken in pro.lua
Snusmumriken
Private и protected — объективно особо не особо нужны, но если прям требуются — локальные переменные внутри модуля, фактически upvalue:
*module.lua*
local bar = 300 --< типа private

local M = {}
function M.foo(v)
 return v + bar
end

return M

Делать прям приватные поля конкретных объектов — несколько сложнее и нужны извращения, но тоже можно теми же upvalue.
НО, никто не мешает именовать "приватные" методы и функции начиная с "_", типа

function Class:new(x, y)
 self.x = x
 self.y = y
 -- "приватное" поле
 self._area = self.x * self.y
end

-- "приватный" метод, пользователь его видит
-- но понимает что лучше не лезть руками
function Class._raw_set(x, y)
 self.x = x
 self.y = y
end

Соглашение между джентльменами. Это работает.
источник

VV

V V in pro.lua
Snusmumriken
Private и protected — объективно особо не особо нужны, но если прям требуются — локальные переменные внутри модуля, фактически upvalue:
*module.lua*
local bar = 300 --< типа private

local M = {}
function M.foo(v)
 return v + bar
end

return M

Делать прям приватные поля конкретных объектов — несколько сложнее и нужны извращения, но тоже можно теми же upvalue.
Можно многое) но нужно ли - знают только люди, которые либо это используют на практике, либо нет.
Я использовал и классы, и наследование, и управление этим зоопарком через специальные деревья.
Вот и стало интересно, кто-то ещё погружался в этот вопрос? Если да, то насколько и в каких моментах?
источник

VV

V V in pro.lua
mihacooper
Ну нет системы типов как в статических языках. Статичкой проверки интерфейсов,  доступности полей, и т.п.
Т.е. для вас все эти "тонкости" нужны ровно настолько, насколько того требует язык, и не больше? И если интерпретатору не нужны объявления private/public, то и незачем их объявлять?))
источник

m

mihacooper in pro.lua
Snusmumriken
НО, никто не мешает именовать "приватные" методы и функции начиная с "_", типа

function Class:new(x, y)
 self.x = x
 self.y = y
 -- "приватное" поле
 self._area = self.x * self.y
end

-- "приватный" метод, пользователь его видит
-- но понимает что лучше не лезть руками
function Class._raw_set(x, y)
 self.x = x
 self.y = y
end

Соглашение между джентльменами. Это работает.
Я вот все-таки больше склоняюсь к тому, чтобы возможностями языка обеспечивать те или иные соглашения, а не "по-джентельменски". Годы интерпрайза учат не доверять этим джентльменам)
источник

S

Snusmumriken in pro.lua
А мне норм : )
источник

m

mihacooper in pro.lua
V V
Т.е. для вас все эти "тонкости" нужны ровно настолько, насколько того требует язык, и не больше? И если интерпретатору не нужны объявления private/public, то и незачем их объявлять?))
Вот я выше ответил снусу, там мое мнение на это счёт)
источник

VV

V V in pro.lua
Snusmumriken
НО, никто не мешает именовать "приватные" методы и функции начиная с "_", типа

function Class:new(x, y)
 self.x = x
 self.y = y
 -- "приватное" поле
 self._area = self.x * self.y
end

-- "приватный" метод, пользователь его видит
-- но понимает что лучше не лезть руками
function Class._raw_set(x, y)
 self.x = x
 self.y = y
end

Соглашение между джентльменами. Это работает.
Можно сделать как скрытую метатаблица, тогда другой джентльмен даже захочет, не залезет =)
Но требовалось ли кому-то такое?
источник

S

Snusmumriken in pro.lua
mihacooper
Я вот все-таки больше склоняюсь к тому, чтобы возможностями языка обеспечивать те или иные соглашения, а не "по-джентельменски". Годы интерпрайза учат не доверять этим джентльменам)
Язык при этом не должен заставлять соблюдать всю эту фигню, как в java/c#, плюс эти штуки капитально переусложняют сам яп.
источник