- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
function getPointFactory() {
class P {
x = 0;
y = 0;
}
return new P();
}
function main() {
const PointZero = getPointFactory();
print("done.");
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−1
function getPointFactory() {
class P {
x = 0;
y = 0;
}
return new P();
}
function main() {
const PointZero = getPointFactory();
print("done.");
}
все шах и мат вам... с/c++
ASD_77 16.02.2022 15:21 # 0
OMuKPOH 16.02.2022 15:26 # 0
ASD_77 16.02.2022 15:38 # 0
666_N33D135 16.02.2022 17:12 # 0
ASD_77 16.02.2022 17:18 # 0
666_N33D135 16.02.2022 17:25 # 0
guest6 16.02.2022 22:35 # 0
Однажды я спросил восемь оопидоров "что такое класс?" и получил восемь разных ответов
bormand 16.02.2022 22:37 # 0
guest6 16.02.2022 22:44 # 0
В мое время было популярно определение "это данные, и методы для работы над ними"
bormand 16.02.2022 22:46 # 0
Т.е. если я напишу на Си структуру и функции для работы с ней, это будет класс?
3.14159265 03.06.2022 18:26 # 0
Конечно. Няписать на Си — это класс!
guest6 16.02.2022 22:48 # +1
---
Вот одно из формальных определений класса: «Класс — это элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию»
---
Класс В C# описывает объект.
---
A Class is like an object constructor, or a "blueprint" for creating objects.
--
выбирай
bormand 16.02.2022 22:51 # 0
guest6 16.02.2022 22:53 # 0
bormand 16.02.2022 22:53 # +2
> нельзя инстанциировать
А с чего ты взял, что этот говнокостыль из джавы, применяемый для эмуляции обычных функций, которые туда забыли завезти -- класс?
По-моему эта хрень вообще не имеет отношения к ООП.
guest6 16.02.2022 22:57 # 0
Я даже в С++ могу так сделать, и в ObjC, просто там такой хуйни не творят.
Во-вторых во всех случаях я использую ключевое слово "class". Разве это не класс? Как тогда отличить класс настоящий от не настоящего?
> По-моему эта хрень вообще не имеет отношения к ООП.
Обязателен ли класс для ООП? Что с прототипориентированным оп?
bormand 16.02.2022 23:05 # 0
Неведомая ёбаная хуйня, настолько притянутая за уши, что вообще никак не взаимодействует с инстансами класса...
Такое ощущение, что ООП-сектанты не умеют применять свой же Single Responsibility Principle и смешали "класс", "пространство имён" и "глобалки" в кучу. Логично, что после такого уже сложно дать определение класса.
З.Ы. А на самом деле, им просто стыдно было писать глобалки. Вот они и переименовали их в "статические поля". Хотя это именно глобалки со всеми их проблемами.
Fike 16.02.2022 23:10 # 0
guest6 16.02.2022 23:20 # 0
То есть в питоне ООП нет?
> контекст, в котором вызывается тот или иной метод.
То есть в JS до ES6 ООП нет?
> потому что у них нет этого самого контекста.
У класс метода в питоне есть.
Алсо,
ооп?
Fike 16.02.2022 23:35 # 0
Питон не ООП-язык. Начиная с банального len().
> То есть в JS до ES6 ООП нет?
То есть в ES6 завезли классы, а я тебе совсем про другое. this там с незапамятных времен.
> Алсо, ооп?
Конечно нет. Контекст это не такая штука, которая передается. Она может создаваться и видоизменяться под вызов, но не передаваться.
OMuKPOH 17.02.2022 00:15 # 0
bormand 16.02.2022 23:14 # 0
Qed.
bormand 16.02.2022 23:15 # 0
Нет конечно. Это пространство имён для самых обычных функций и глобалок. Какой же это класс, если у него нету ни инстансов ни полей ни методов?
guest6 16.02.2022 23:21 # 0
У него есть статические поля и статические методы, не?
bormand 16.02.2022 23:24 # 0
guest6 16.02.2022 23:26 # 0
bormand 16.02.2022 23:30 # 0
Полиморфизм умеют, наследование умеют... Ну, три кита ООП, о которых все так любят говорить.
Напиши-ка мне тесты для статиков. То-то и оно. Обычные глобалки и функции, как во времена фортрана.
Pretty_Young_Thing 16.02.2022 23:32 # 0
guest6 16.02.2022 23:32 # 0
У нас в котле все классы по умолчанию final, так что какой же тут полимофризм и наследование?
А в С++ если метод не виртуальный, то ведь тоже никакого оплимморфизма?
Выходит, и там class не class?
bormand 16.02.2022 23:34 # 0
Я могу добавить virtual и юзать полиморфизм для обычного метода если он мне нужен. Я могу убрать final если мне понадобится наследование.
Но не могу юзать полиморфизм для статика даже если он мне нужен. Это не метод. Это просто функция.
guest6 17.02.2022 00:59 # 0
bormand 17.02.2022 01:01 # 0
У статических методов в джаве нету никакого полиморфизма, никакими кейвордами их для этого не обмазать и тот же mock для них не сделать без ёбли.
Это просто функция. Старая добрая функция из фортрана.
/thread
guest6 17.02.2022 01:02 # 0
cglib разве что
bormand 17.02.2022 01:08 # 0
Я тебе про общий случай, а ты мне про какие-то конкретные примеры хуёвого дизайна...
guest6 17.02.2022 01:51 # 0
GamCovidVacGovno 17.02.2022 05:02 # 0
bormand 16.02.2022 23:16 # 0
Хрен знает, если честно. Наверное нет, если мы не будем ограничиваться статической типизацией, а позволим объектам как-то меняться на ходу, адаптироваться под задачу.
guest6 16.02.2022 22:58 # 0
ObeseYoung 16.02.2022 23:18 # +1
kcalbCube 21.02.2022 14:17 # 0
j123123 21.02.2022 14:19 # +2
kcalbCube 21.02.2022 14:51 # 0
объект - не pod
Noodles 21.02.2022 14:52 # 0
guest6 21.02.2022 14:55 # +2
у меня в гомоиконности нет никаких "объектов" которые не "данные"
kcalbCube 21.02.2022 14:56 # 0
guest6 21.02.2022 14:58 # 0
Кстати, что такое pod?
kcalbCube 21.02.2022 15:02 # 0
guest6 21.02.2022 15:34 # 0
kcalbCube 21.02.2022 15:51 # 0
вот если бы a был бы функтором, тогда бы класс был.
guest6 21.02.2022 15:54 # 0
Soul_re@ver 21.02.2022 15:12 # +1
В одной лежит void*, и используется для передачи всех видов указателей на функции. Почему структура, а не просто void*? Чтобы отличать от void* используемого в других целях на уровне типов.
Во второй лежит указатель на функцию определённой сигнатуры. Используется, чтобы передать его куда-то. Отдельная структура, чтобы отличать его от указателей на функцию такой же сигнатуры, используемой в других целях на уровне типов.
В третьей лежит указатель на функцию определённой сигнатуры. Используется, чтобы поменять поведение функций, работающих с данным типом.
Что из этого классы? Структуры? Напиши скрипт, который мне их будет помечать, чтобы я не запутался.
Noodles 21.02.2022 15:32 # 0
Kypumca 21.02.2022 15:34 # 0
guest6 21.02.2022 15:41 # 0
kcalbCube 21.02.2022 15:51 # 0
guest6 21.02.2022 15:54 # 0
kcalbCube 21.02.2022 15:55 # 0
guest6 21.02.2022 15:58 # 0
char* это указатель на какой-то чар, без всякой семантики
kcalbCube 21.02.2022 15:59 # 0
guest6 21.02.2022 16:02 # 0
int z* = &i;
тут i это массив?
kcalbCube 21.02.2022 16:04 # 0
Noodles 21.02.2022 16:05 # 0
Noodles 21.02.2022 15:58 # 0
Noodles 21.02.2022 15:58 # 0
kcalbCube 21.02.2022 15:59 # 0
666_N33D135 21.02.2022 14:26 # 0
guest6 21.02.2022 14:41 # 0
kcalbCube 21.02.2022 14:49 # 0
guest6 21.02.2022 14:56 # 0
Soul_re@ver 21.02.2022 15:04 # +1
Это класс?
Функционально ничем не отличается от класса в крестах.
kcalbCube 21.02.2022 15:51 # 0
guest6 21.02.2022 15:55 # 0
kcalbCube 21.02.2022 15:58 # 0
Soul_re@ver 21.02.2022 16:06 # 0
Это хранит информацию о том как работать над собой?
А это?
А если мы соптимизируем?
kcalbCube 21.02.2022 16:15 # 0
KaKou-To_xyu 21.02.2022 16:34 # 0
666_N33D135 21.02.2022 16:37 # 0
Все обычно придумывают свои трактовки терминов ООП чтобы отнести угодные к ООП, а неугодные к не-ООП или наоборот. Типа как ты или я.
Soul_re@ver 21.02.2022 17:06 # +1
Споры по поводу терминов ООП, по-моему, уступают только спорам о каноничных™ реализациях паттернов.
guest6 21.02.2022 17:11 # 0
Еще прикольно поспорить насколько какой подхот "пайтоник" или "руби вэй"
guest6 21.02.2022 17:26 # 0
> 666_N33D135
Noodles 21.02.2022 17:29 # 0
Noodles 21.02.2022 17:28 # 0
ООП — это когда пишеш
guest6 21.02.2022 17:31 # +1
Вместо устаревшего подхода
следует использовать современный
Невооруженным глазом видно, что второй подход гибче
666_N33D135 21.02.2022 16:38 # 0
guest6 21.02.2022 17:04 # 0
guest6 21.02.2022 17:27 # +1
guest6 21.02.2022 17:09 # 0
а вот это объект?
Soul_re@ver 21.02.2022 15:56 # 0
Он возвращается разными хелперами для инициализации «классов», и содержит указатель, который запихивается в класс. Нужен, чтобы не запутаться в сотне разных void*.
Хочу заметить, что он абсолютно ничем не отличается от foo и может использоваться вместо него. Это всё ещё класс?
А если я заменю void* на int, это всё ещё останется классом?
j123123 21.02.2022 14:21 # 0
https://govnokod.ru/27996#comment761886
> ООП это вообще хер знает что
j123123
С классами то же самое.
666_N33D135 21.02.2022 14:31 # 0
> Хочу лошадку.
666_N33D135
> Пошёл нахуй с моей ветки, гандон!
Web_Monkey
> Ко-ко-ко!
Rooster
KaBauHblu_nemyx 21.02.2022 14:34 # 0
Support 21.02.2022 20:14 # 0
3.14159265 03.06.2022 19:48 # +1
1. в различных системах классификации обширная категория объектов объединенных общностью главных признаков
2. социол. большая группа людей, объединённых общностью положения условий жизни, доходов и т. п.
3. в учебн. заведениях совокупность учеников школы одного и того же года обучения
4. в учебн. заведениях совокупность учащихся всех лет обучения конкретного преподавателя в музыкальных образовательных учреждениях
5. перен. помещение для учебных занятий класса в значении 3
6. разряд, уровень квалификации
7. комп., прогр. в объектно-ориентированном программировании определяемый пользователем тип данных, объединяющий прототипические структуры данных и методы работы с ними
8. предик., сленг очень хорошо
nyTuH_nugop 04.06.2022 02:11 # 0
Ну как получил ответ?
kcalbCube 16.02.2022 15:39 # +1
kcalbCube 16.02.2022 15:41 # 0
ASD_77 16.02.2022 15:51 # +2
Soul_re@ver 16.02.2022 15:51 # +2
http://coliru.stacked-crooked.com/a/019ef1ddf0aae2cb
kcalbCube 16.02.2022 15:53 # 0
guest6 16.02.2022 15:55 # +3
Чувак, ключевые слова "new" и "delete" не нужны в 99.99999% случаев. Использование их почти всегда говорит о низком качестве кода
bormand 16.02.2022 17:33 # 0
666_N33D135 16.02.2022 17:35 # +1
Использование демонической мапяти почти всегда говорит о низком качестве кода
ASD_77 16.02.2022 17:57 # 0
пример
char* add(char* s, char* p)
{
auto r = s + p;
return r;
}
bormand 16.02.2022 18:01 # +1
666_N33D135 16.02.2022 18:06 # 0
А зачем "**"?
Be6_nemyx 16.02.2022 18:07 # 0
bormand 16.02.2022 18:10 # 0
ASD_77 16.02.2022 19:42 # 0
Soul_re@ver 16.02.2022 18:04 # 0
bormand 16.02.2022 18:06 # 0
666_N33D135 16.02.2022 18:06 # 0
bormand 16.02.2022 18:26 # 0
666_N33D135 16.02.2022 18:28 # 0
bormand 16.02.2022 19:14 # +1
666_N33D135 16.02.2022 19:24 # 0
Вообще сишкостроки гениальное творение, с ними не соскучишься.
И не отказаться от них, на них везде всё заваязано)
BEKTOPHblu_nETyX 16.02.2022 19:32 # 0
Soul_re@ver 16.02.2022 19:36 # +1
guest6 16.02.2022 19:37 # 0
как тян?
Fike 16.02.2022 19:41 # 0
guest6 16.02.2022 19:56 # 0
ucnaHckuu_CTblD 16.02.2022 20:42 # 0
ASD_77 16.02.2022 19:42 # 0
666_N33D135 16.02.2022 19:46 # +1
У меня на этапе конпеляции известно, сколько программа потребует мапяти.
ASD_77 16.02.2022 21:45 # 0
ucnaHckuu_CTblD 16.02.2022 20:42 # 0
Soul_re@ver 16.02.2022 15:56 # 0
Починил
guest6 16.02.2022 15:54 # 0
Soul_re@ver 16.02.2022 15:58 # 0
Создание идёт в make_unique, которое сразу создаёт объект в куче.
Вообще куча, в принципе, и не нужна, можно заставить getPointFactory возвращать объект по значению.
http://coliru.stacked-crooked.com/a/c346d56a168707bf
guest6 16.02.2022 16:00 # 0
kcalbCube 16.02.2022 16:07 # 0
так что не выйдет.
j123123 17.02.2022 06:25 # 0
https://wiki.dlang.org/Voldemort_types
BEKTOPHblu_nETyX 17.02.2022 06:32 # 0
j123123 17.02.2022 06:34 # 0
j123123 17.02.2022 06:36 # 0
https://gist.github.com/mosra/7363ac0f226f6370c78d
ASD_77 16.02.2022 15:51 # 0
kcalbCube 16.02.2022 16:17 # 0
bormand 16.02.2022 17:22 # +2
666_N33D135 16.02.2022 17:29 # 0
bormand 16.02.2022 17:36 # 0
666_N33D135 16.02.2022 17:38 # +1
Типизированные бляди сонулли!
Soul_re@ver 16.02.2022 17:43 # 0
bormand 16.02.2022 17:45 # +1
GamCovidVacGovno 17.02.2022 05:07 # +1
Нейминг-бляди соснули.
Rooster 17.02.2022 05:32 # 0
OPAHrymaH 17.02.2022 11:51 # 0
Лесник сидел напротив, болтал о том, о сём.
Что нет среди животных у старика врагов,
Что нравится ему подкармливать волков.
ucnaHckuu_CTblD 17.02.2022 15:56 # 0
3.14159265 03.06.2022 18:51 # 0
Сишка всё так же непринуждённо сливает в хламище всю скриптуху.
guest6 03.06.2022 19:08 # 0
3.14159265 03.06.2022 19:45 # 0
С большим удовольствием прочёл дискач об опеределениях термина «класс».
666_N33D135 16.02.2022 17:30 # +1
ASD_77 16.02.2022 18:22 # 0
666_N33D135 16.02.2022 18:29 # 0
Soul_re@ver 16.02.2022 18:32 # +1
Нахуя я ещё не придумал, но можно.
kcalbCube 21.02.2022 15:54 # 0
ASD_77 16.02.2022 17:58 # 0
bormand 16.02.2022 18:00 # +2
ASD_77 16.02.2022 18:24 # 0
Soul_re@ver 16.02.2022 18:03 # +2
Но какую проблему решает этот код? Я могу то же самое написать на няшной без этих всех анонимных классов, сохранений классов в переменную и прочего синтаксического мусора.
getClass семантически это типичная фабрика фабрик.
666_N33D135 16.02.2022 18:30 # 0
Слился, питушок.
Soul_re@ver 16.02.2022 18:33 # 0
666_N33D135 16.02.2022 18:34 # +1
groser 16.02.2022 19:00 # 0
666_N33D135 16.02.2022 19:02 # 0
groser 16.02.2022 19:04 # 0
666_N33D135 16.02.2022 19:05 # 0
groser 16.02.2022 19:08 # 0
666_N33D135 16.02.2022 19:20 # 0
Ничего не понимаю...
guest6 16.02.2022 22:33 # 0
groser 16.02.2022 19:07 # 0
А вам слабо!?
CHayT 16.02.2022 18:03 # +5
ObeseYoung 16.02.2022 18:50 # 0
kcalbCube 16.02.2022 19:58 # 0
666_N33D135 16.02.2022 20:00 # 0
А давайте мерятся, у кого UB больше!
ASD_77 16.02.2022 21:45 # 0