- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
function getPointFactory() {
class P {
x = 0;
y = 0;
}
return new P();
}
function main() {
const PointZero = getPointFactory();
print("done.");
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
function getPointFactory() {
class P {
x = 0;
y = 0;
}
return new P();
}
function main() {
const PointZero = getPointFactory();
print("done.");
}
все шах и мат вам... с/c++
ASD__77 # 0
OMuKPOH # 0 ⇈
ASD__77 # 0 ⇈
666_N33D135 # 0 ⇈
ASD__77 # 0 ⇈
666_N33D135 # 0 ⇈
guest # 0 ⇈
Однажды я спросил восемь оопидоров "что такое класс?" и получил восемь разных ответов
bormand # 0 ⇈
guest # 0 ⇈
В мое время было популярно определение "это данные, и методы для работы над ними"
bormand # 0 ⇈
Т.е. если я напишу на Си структуру и функции для работы с ней, это будет класс?
3.14159265 # 0 ⇈
Конечно. Няписать на Си — это класс!
guest # 0 ⇈
---
Вот одно из формальных определений класса: «Класс — это элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию»
---
Класс В C# описывает объект.
---
A Class is like an object constructor, or a "blueprint" for creating objects.
--
выбирай
bormand # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
> нельзя инстанциировать
А с чего ты взял, что этот говнокостыль из джавы, применяемый для эмуляции обычных функций, которые туда забыли завезти -- класс?
По-моему эта хрень вообще не имеет отношения к ООП.
guest # 0 ⇈
Я даже в С++ могу так сделать, и в ObjC, просто там такой хуйни не творят.
Во-вторых во всех случаях я использую ключевое слово "class". Разве это не класс? Как тогда отличить класс настоящий от не настоящего?
> По-моему эта хрень вообще не имеет отношения к ООП.
Обязателен ли класс для ООП? Что с прототипориентированным оп?
bormand # 0 ⇈
Неведомая ёбаная хуйня, настолько притянутая за уши, что вообще никак не взаимодействует с инстансами класса...
Такое ощущение, что ООП-сектанты не умеют применять свой же Single Responsibility Principle и смешали "класс", "пространство имён" и "глобалки" в кучу. Логично, что после такого уже сложно дать определение класса.
З.Ы. А на самом деле, им просто стыдно было писать глобалки. Вот они и переименовали их в "статические поля". Хотя это именно глобалки со всеми их проблемами.
Fike # 0 ⇈
guest # 0 ⇈
То есть в питоне ООП нет?
> контекст, в котором вызывается тот или иной метод.
То есть в JS до ES6 ООП нет?
> потому что у них нет этого самого контекста.
У класс метода в питоне есть.
Алсо,
ооп?
Fike # 0 ⇈
Питон не ООП-язык. Начиная с банального len().
> То есть в JS до ES6 ООП нет?
То есть в ES6 завезли классы, а я тебе совсем про другое. this там с незапамятных времен.
> Алсо, ооп?
Конечно нет. Контекст это не такая штука, которая передается. Она может создаваться и видоизменяться под вызов, но не передаваться.
OMuKPOH # 0 ⇈
bormand # 0 ⇈
Qed.
bormand # 0 ⇈
Нет конечно. Это пространство имён для самых обычных функций и глобалок. Какой же это класс, если у него нету ни инстансов ни полей ни методов?
guest # 0 ⇈
У него есть статические поля и статические методы, не?
bormand # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
Полиморфизм умеют, наследование умеют... Ну, три кита ООП, о которых все так любят говорить.
Напиши-ка мне тесты для статиков. То-то и оно. Обычные глобалки и функции, как во времена фортрана.
Pretty_Young_Thing # 0 ⇈
guest # 0 ⇈
У нас в котле все классы по умолчанию final, так что какой же тут полимофризм и наследование?
А в С++ если метод не виртуальный, то ведь тоже никакого оплимморфизма?
Выходит, и там class не class?
bormand # 0 ⇈
Я могу добавить virtual и юзать полиморфизм для обычного метода если он мне нужен. Я могу убрать final если мне понадобится наследование.
Но не могу юзать полиморфизм для статика даже если он мне нужен. Это не метод. Это просто функция.
guest # 0 ⇈
bormand # 0 ⇈
У статических методов в джаве нету никакого полиморфизма, никакими кейвордами их для этого не обмазать и тот же mock для них не сделать без ёбли.
Это просто функция. Старая добрая функция из фортрана.
/thread
guest # 0 ⇈
cglib разве что
bormand # 0 ⇈
Я тебе про общий случай, а ты мне про какие-то конкретные примеры хуёвого дизайна...
guest # 0 ⇈
GamCovidVacGovno # 0 ⇈
bormand # 0 ⇈
Хрен знает, если честно. Наверное нет, если мы не будем ограничиваться статической типизацией, а позволим объектам как-то меняться на ходу, адаптироваться под задачу.
guest # 0 ⇈
ObeseYoung # 0 ⇈
kcalbCube # 0 ⇈
j123123 # 0 ⇈
kcalbCube # 0 ⇈
объект - не pod
Noodles # 0 ⇈
guest # 0 ⇈
у меня в гомоиконности нет никаких "объектов" которые не "данные"
kcalbCube # 0 ⇈
guest # 0 ⇈
Кстати, что такое pod?
kcalbCube # 0 ⇈
guest # 0 ⇈
kcalbCube # 0 ⇈
вот если бы a был бы функтором, тогда бы класс был.
guest # 0 ⇈
[email protected] # 0 ⇈
В одной лежит void*, и используется для передачи всех видов указателей на функции. Почему структура, а не просто void*? Чтобы отличать от void* используемого в других целях на уровне типов.
Во второй лежит указатель на функцию определённой сигнатуры. Используется, чтобы передать его куда-то. Отдельная структура, чтобы отличать его от указателей на функцию такой же сигнатуры, используемой в других целях на уровне типов.
В третьей лежит указатель на функцию определённой сигнатуры. Используется, чтобы поменять поведение функций, работающих с данным типом.
Что из этого классы? Структуры? Напиши скрипт, который мне их будет помечать, чтобы я не запутался.
Noodles # 0 ⇈
Kypumca # 0 ⇈
guest # 0 ⇈
kcalbCube # 0 ⇈
guest # 0 ⇈
kcalbCube # 0 ⇈
guest # 0 ⇈
char* это указатель на какой-то чар, без всякой семантики
kcalbCube # 0 ⇈
guest # 0 ⇈
int z* = &i;
тут i это массив?
kcalbCube # 0 ⇈
Noodles # 0 ⇈
Noodles # 0 ⇈
Noodles # 0 ⇈
kcalbCube # 0 ⇈
666_N33D135 # 0 ⇈
guest # 0 ⇈
kcalbCube # 0 ⇈
guest # 0 ⇈
[email protected] # 0 ⇈
Это класс?
Функционально ничем не отличается от класса в крестах.
kcalbCube # 0 ⇈
guest # 0 ⇈
kcalbCube # 0 ⇈
kcalbCube # 0 ⇈
[email protected] # 0 ⇈
Это хранит информацию о том как работать над собой?
А это?
А если мы соптимизируем?
kcalbCube # 0 ⇈
KaKou-To_xyu # 0 ⇈
666_N33D135 # 0 ⇈
Все обычно придумывают свои трактовки терминов ООП чтобы отнести угодные к ООП, а неугодные к не-ООП или наоборот. Типа как ты или я.
[email protected] # 0 ⇈
Споры по поводу терминов ООП, по-моему, уступают только спорам о каноничных™ реализациях паттернов.
guest # 0 ⇈
Еще прикольно поспорить насколько какой подхот "пайтоник" или "руби вэй"
guest # 0 ⇈
> 666_N33D135
Noodles # 0 ⇈
Noodles # 0 ⇈
ООП — это когда пишеш
guest # 0 ⇈
Вместо устаревшего подхода
следует использовать современный
Невооруженным глазом видно, что второй подход гибче
666_N33D135 # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
а вот это объект?
[email protected] # 0 ⇈
Он возвращается разными хелперами для инициализации «классов», и содержит указатель, который запихивается в класс. Нужен, чтобы не запутаться в сотне разных void*.
Хочу заметить, что он абсолютно ничем не отличается от foo и может использоваться вместо него. Это всё ещё класс?
А если я заменю void* на int, это всё ещё останется классом?
j123123 # 0 ⇈
https://govnokod.ru/27996#comment761886
> ООП это вообще хер знает что
j123123
С классами то же самое.
666_N33D135 # 0 ⇈
> Хочу лошадку.
666_N33D135
> Пошёл нахуй с моей ветки, гандон!
Web_Monkey
> Ко-ко-ко!
Rooster
KaBauHblu_nemyx # 0 ⇈
Support # 0 ⇈
3.14159265 # 0 ⇈
1. в различных системах классификации обширная категория объектов объединенных общностью главных признаков
2. социол. большая группа людей, объединённых общностью положения условий жизни, доходов и т. п.
3. в учебн. заведениях совокупность учеников школы одного и того же года обучения
4. в учебн. заведениях совокупность учащихся всех лет обучения конкретного преподавателя в музыкальных образовательных учреждениях
5. перен. помещение для учебных занятий класса в значении 3
6. разряд, уровень квалификации
7. комп., прогр. в объектно-ориентированном программировании определяемый пользователем тип данных, объединяющий прототипические структуры данных и методы работы с ними
8. предик., сленг очень хорошо
nyTuH_nugop # 0 ⇈
Ну как получил ответ?
kcalbCube # 0
kcalbCube # 0 ⇈
ASD__77 # 0 ⇈
[email protected] # 0 ⇈
http://coliru.stacked-crooked.com/a/019ef1ddf0aae2cb
kcalbCube # 0 ⇈
guest # 0 ⇈
Чувак, ключевые слова "new" и "delete" не нужны в 99.99999% случаев. Использование их почти всегда говорит о низком качестве кода
bormand # 0 ⇈
666_N33D135 # 0 ⇈
Использование демонической мапяти почти всегда говорит о низком качестве кода
ASD__77 # 0 ⇈
пример
char* add(char* s, char* p)
{
auto r = s + p;
return r;
}
bormand # 0 ⇈
666_N33D135 # 0 ⇈
А зачем "**"?
Be6_nemyx # 0 ⇈
bormand # 0 ⇈
ASD__77 # 0 ⇈
[email protected] # 0 ⇈
bormand # 0 ⇈
666_N33D135 # 0 ⇈
bormand # 0 ⇈
666_N33D135 # 0 ⇈
bormand # 0 ⇈
666_N33D135 # 0 ⇈
Вообще сишкостроки гениальное творение, с ними не соскучишься.
И не отказаться от них, на них везде всё заваязано)
BEKTOPHblu_nETyX # 0 ⇈
[email protected] # 0 ⇈
guest # 0 ⇈
как тян?
Fike # 0 ⇈
guest # 0 ⇈
ucnaHckuu_CTblD # 0 ⇈
ASD__77 # 0 ⇈
666_N33D135 # 0 ⇈
У меня на этапе конпеляции известно, сколько программа потребует мапяти.
ASD__77 # 0 ⇈
ucnaHckuu_CTblD # 0 ⇈
[email protected] # 0 ⇈
Починил
guest # 0 ⇈
[email protected] # 0 ⇈
Создание идёт в make_unique, которое сразу создаёт объект в куче.
Вообще куча, в принципе, и не нужна, можно заставить getPointFactory возвращать объект по значению.
http://coliru.stacked-crooked.com/a/c346d56a168707bf
guest # 0 ⇈
kcalbCube # 0 ⇈
так что не выйдет.
j123123 # 0 ⇈
https://wiki.dlang.org/Voldemort_types
BEKTOPHblu_nETyX # 0 ⇈
j123123 # 0 ⇈
j123123 # 0 ⇈
https://gist.github.com/mosra/7363ac0f226f6370c78d
ASD__77 # 0
kcalbCube # 0 ⇈
bormand # 0
666_N33D135 # 0 ⇈
bormand # 0 ⇈
666_N33D135 # 0 ⇈
Типизированные бляди сонулли!
[email protected] # 0 ⇈
bormand # 0 ⇈
GamCovidVacGovno # 0 ⇈
Нейминг-бляди соснули.
Rooster # 0 ⇈
OPAHrymaH # 0 ⇈
Лесник сидел напротив, болтал о том, о сём.
Что нет среди животных у старика врагов,
Что нравится ему подкармливать волков.
ucnaHckuu_CTblD # 0 ⇈
3.14159265 # 0 ⇈
Сишка всё так же непринуждённо сливает в хламище всю скриптуху.
guest # 0 ⇈
3.14159265 # 0 ⇈
С большим удовольствием прочёл дискач об опеределениях термина «класс».
666_N33D135 # 0
ASD__77 # 0 ⇈
666_N33D135 # 0 ⇈
[email protected] # 0 ⇈
Нахуя я ещё не придумал, но можно.
kcalbCube # 0 ⇈
ASD__77 # 0
bormand # 0 ⇈
ASD__77 # 0 ⇈
bormand # 0 ⇈
[email protected] # 0 ⇈
Но какую проблему решает этот код? Я могу то же самое написать на няшной без этих всех анонимных классов, сохранений классов в переменную и прочего синтаксического мусора.
getClass семантически это типичная фабрика фабрик.
666_N33D135 # 0 ⇈
Слился, питушок.
[email protected] # 0 ⇈
[email protected] # 0 ⇈
666_N33D135 # 0 ⇈
groser # 0 ⇈
666_N33D135 # 0 ⇈
groser # 0 ⇈
666_N33D135 # 0 ⇈
groser # 0 ⇈
А вам слабо!?
groser # 0 ⇈
666_N33D135 # 0 ⇈
groser # 0 ⇈
666_N33D135 # 0 ⇈
groser # 0 ⇈
666_N33D135 # 0 ⇈
Ничего не понимаю...
guest # 0 ⇈
groser # 0 ⇈
А вам слабо!?
CHayT # 0
CHayT # 0
ObeseYoung # 0 ⇈
kcalbCube # 0
666_N33D135 # 0 ⇈
А давайте мерятся, у кого UB больше!
ASD__77 # 0 ⇈