LINUX.ORG.RU
ФорумTalks

[JS прекрасен] ООП не нужен


0

2

ООП - это быдлокод, быдлокод не нужен. Убедите меня в обратном. Зачем нужен ООП? Я классы даже никогда не использовал, но проблем читаемости и структуры не наблюдал.

А еще меня бесят такие товарищи, которые боятся делать так:

obj.wrtSel (
	i = addbr (
		"[quote=" +
			(function (){
				if (i = msg.getElementsByClassName ("sign")[0].getElementsByTagName ("a")[0])
					return i.innerHTML;
				else return "anonymous";
			})() + "]"
		+ seltxt.toString ().replace (
			/(?:>>-----Цитата---->>|^)(.*)<<-----Цитата----<</,
			function (str, p){
				if (p!="") return "[quote]" + p + "[/quote]";
				else return "";
			})
		+ "[/quote]"),
	i.length);
(кусок из будущей версии LORCode Tools)

Страшно представить, сколько бы мусоро-переменных у них завелось бы тут. Как обидно, что в единственном популярном языке с нормальным синтаксисом (Python) так, за редким исключением, не сделаешь (и я в нем связывался с теми 100500 муоро-переменных).

cast drBatty, интересно твое мнение. Также, небыдлокодеры, насколько рационален приведенный код?

чем больше анонимных функций, тем труднее код сопровождать.

грамотное ООП - делает код более понятным и наглядным.

AGUtilities ★★★
()

единственном популярном языке с нормальным синтаксисом (Python) так, за редким исключением, не сделаешь

а так и не нужно делать

AGUtilities ★★★
()
Ответ на: комментарий от KRoN73

Вернёмся к этой теме, когда ты сделаешь свой первый проект, хотя бы тысяч на 50 строк.

50 тысяч строк JS-кода? о_О

Cancellor ★★★★☆
()

Теперь я понял, почему в питоне лямбды однострочные. Всё правильно сделали.

Dragon59 ★★
()

Есть прекрасная книга о паттернах: http://ru.wikipedia.org/wiki/Design_Patterns

Прочитай, может поймёшь зачем ООП юзается.

По коду. Лямбды это конечно круто, но чем дальше программирую, тем больше прихожу к мысли: «Да фиг с парой лишних строчек, лучше пусть будет проще потом разбираться, если что.»

п.с. для таких вещей оч. удобно использовать питоновский «%s» % mystr. Стандартная практика, оч. читабельно и править удобно если что не так, т.к. mystr вычисляется отдельно и меняя логику вычисления этой переменной не рискуешь нопортачить с вычислением других кусков.

Norgat ★★★★★
()
Ответ на: комментарий от KRoN73

KRoN73

А давно движок ЛОРа — это «даже»? :)

Целый полноценный форум и не только, как-никак.

KRoN73

Нет времени на нормальные хорошо оплачиваемые проекты?

Пять тыщь строк... ммм... если последний проект 200 строк - 80$, пять тыщь строк это 2000$. Такие проекты я даже вряд ли найду и уж тем более мне не на что рассчитывать в конкуренции на фрилансе.
Вообще, по-хорошему, мне кажется, такими проектами целая команда должна заниматься. В команде я не состою, и как попасть даже без понятия.

moscwich
() автор топика
Ответ на: комментарий от KRoN73

Linux версии 0.1 в девяностопервом только 10 тысяч строк занимал. И это на си.
Не представляю, кто станет писать 50к строк на яваскрипте и заведётся ли это вообще.

Dragon59 ★★
()
Ответ на: комментарий от Dragon59

наверное имеется в виду написание JS интерфейсов полностью на аяксе. но имхаю, что лучше уж Java заюзать.

AGUtilities ★★★
()
Ответ на: комментарий от Dragon59

Памяти нынче много, не бойся.

Deleted
()
Ответ на: комментарий от r2d2

r2d2

Что мешает использовать функциональщину в ООП?

Невидение нужности в ООП.

moscwich
() автор топика
Ответ на: комментарий от moscwich

ты зря смеёшься.

создание нормального JS кода с использованием минимума лямбд - это подвиг и уважуха. а та лапша что ты привёл - очевидный перекос в сторону нечитабельности кода.

и вообще, я очень уважаю питон за это:

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

AGUtilities ★★★
()

Ах да, Java или C# смотрел уже? Если нет, то посмотри. Те же Swing\Windows Forms\WPF\Qt(PySide, как вариант, если python знаешь) оч. наглядно, на примере компоновки юзер контролов, показывают удобство ООП, имхо.

Norgat ★★★★★
()
Ответ на: комментарий от Binary

Binary

Большая вложенность — возможна. А сабж в питоне не нужен, читаемый код — хороший код.

Несомненно. Как-раз пример, когда вложенности не хватает как-раз для читаемости.

moscwich
() автор топика

Это write-only код. Читать такое — глаз не жалеть.

redixin ★★★★
()
Ответ на: комментарий от moscwich

Несомненно

этот код кричит о том, что ты любишь выпендриваться и делать всё нестандартно. вот и всё.

на пример, что делает exit() по середине файла? что это пипцовая тяга к созданию рекурсивного кода?

скажу проще: невыё*ывайся и делай как положено. хотя, это твоё личное дело...

AGUtilities ★★★
()

Матьмояженщнина. Уж лучше ООП, чем такое.

ugoday ★★★★★
()

И да, я пишу примерно так же. Но исключительно для себя.

Cancellor ★★★★☆
()
Ответ на: комментарий от Norgat

Есть прекрасная книга о паттернах: http://ru.wikipedia.org/wiki/Design_Patterns

Уже кучу раз слышал мнение, что паттерны, включая паттерны GoF, - просто готовые рецепты по исправлению недостатков парадигмы ООП.

RedPossum ★★★★★
()

Убедите меня в обратном

Зачем? Мучайтесь дальше, нам пофиг. А с форматированием кода что-то не то.

vsemnazlo
()
Ответ на: комментарий от RedPossum

Уже кучу раз слышал мнение, что паттерны, включая паттерны GoF, - просто готовые рецепты по исправлению недостатков парадигмы ООП.

Давай пруф с хорошей аргументацией. Иначе это лишь пустой звук.

Norgat ★★★★★
()
Ответ на: комментарий от moscwich

Да присвоение вроде бы тоже ресурсы занимает, как и сами переменные, или нет?

Не делай нам смешно. Рассуждения о ресурсах от жабаскриптера выглядят ещё более забавно, чем подобные рассуждения от питониста.

PolarFox ★★★★★
()
Ответ на: комментарий от AGUtilities

А как еще? Это же обычные функции, их тупо пишут в начале, в каком порядке они могу быть? Если бы было по-нормальному в пионе, то вот как-раз эту функцию exit можно было бы не писать, а сразу вставить... Позже до меня дошло правда что можно лямбду, но, мля, функция ради одной команды, даже если лямбда, это ж пздц!

moscwich
() автор топика
Ответ на: комментарий от AGUtilities

AGUtilities

к тому же, ещё и документацию по питону плохо читал

У меня с нглишом все плохо, поэтому только побирался по статейкам из вики[книг] да хабра (ну и еще по каким-нибудь). С JS и PHP повезло - есть javascript.ru и php.su

moscwich
() автор топика
Ответ на: комментарий от PolarFox

PolarFox

Да присвоение вроде бы тоже ресурсы занимает, как и сами переменные, или нет?

Не делай нам смешно. Рассуждения о ресурсах от жабаскриптера выглядят ещё более забавно, чем подобные рассуждения от питониста.

Это обычное предположение, выдвинутое с целью его подтвердить или опровергнуть, выяснив верное суждение, у знающих людей.

moscwich
() автор топика
Ответ на: комментарий от Norgat

Давай пруф с хорошей аргументацией.

С хорошей аргументацией я врядли найду, это всего лишь мнения, а трудов на эту тему я еще не видел, но почитал бы. Вся аргументация во всех подобных пруфах сводится к чему-то такому http://stackoverflow.com/questions/1579162/are-design-patterns-really-languag...

То есть был С, ООП в нем был паттерном. Потом появились ООП языки, всякие визиторы, фабрики и тд. в них паттерны. Теперь С# в меньшей мере, Scala в большей позволяет эти паттерны выразить парой строк кода. То есть паттерн - это решение проблемы языка(и реализуемой им парадигмы), заключающейся в недостаточности выразительных средств для описания некого положения вещей в предметной области без костылей, подпорок и потери гибкости.

Я к тому что на вопрос «зачем надо ООП» ответом должно быть что-нибудь о паттернах не ООП языков.

RedPossum ★★★★★
()
Ответ на: комментарий от baverman

Теперь ты должен сделать вдоль.

+1.
Или хотя бы самозабаниться.

Manhunt ★★★★★
()

Зачем нужен ООП?
Я классы даже никогда не использовал

/0

mopsene ★★★
()
Ответ на: комментарий от RedPossum

Я к тому что на вопрос «зачем надо ООП» ответом должно быть что-нибудь о паттернах не ООП языков.

Книгу читал? Если что, то основная ценность для ТС в этой книге - описание ситуаций, когда юзается паттерн (оно там дано к каждому), а не конкретная реализация. Написано оч. доступно и показывает ситуации, когда и зачем используется ООП.

То есть паттерн - это решение проблемы языка(и реализуемой им парадигмы), заключающейся в недостаточности выразительных средств для описания некого положения вещей в предметной области без костылей, подпорок и потери гибкости.

Согласен, но, имхо, это номральная ситуация эволюции ЯП. Поняли проблему текущих ЯП -> создали паттерны для решения это проблемы -> когда накопилась критическая масса проблем и решений создали новую парадигму -> и т.п. по кругу. Один фиг, качественной замены ООП в ближайшие годы не предвидится что-то.

Norgat ★★★★★
()
Ответ на: комментарий от moscwich

TC, у тебя проблема в том, что искусство программинга, это не просто умение орудовать конструкциями языка. орудовать, извиняюсь, может и мясник на рынке.

Любая конструкция в программинге, должна быть завершённой до такой степени, чтобы контуженный человек мог буквально по буквам прочесть то что ты пишешь...

А когда ты делаешь рекурсивный кодинг, с кучей лямбд и т.д., это делает дополнительную нагрузку и делает необходимым прочтение всего кода, прежде чем начать разбираться, что всё это делает.

А правильный код - понятен с первых строк, даже без комментариев.

книжка на русском

AGUtilities ★★★
()
Ответ на: комментарий от Norgat

П.С.

Лезть под капот, для понимания зачем ООП не нужно(имхо). Сейчас ТС важнее понять когда ООП удобно заюзать, а не из чего там корни растут.

Norgat ★★★★★
()
Ответ на: комментарий от Binary

Как ты предлагаешь привести в человеческий вид какую-нибудь часть того кода (кроме exit()) с помощью лямбд? Хотя когда писал действительно лямбдами не увлекался.

moscwich
() автор топика
Ответ на: комментарий от moscwich

Список всех Python Enhancement Proposals (в моём нубопереводе - питоновские рекомендации по улучшению(кода)).

Norgat ★★★★★
()
Ответ на: комментарий от moscwich

Если твой код не требует обусфукации и ты в нём разбираешься, то ты хороший JS программист.

shahid ★★★★★
()
Ответ на: комментарий от moscwich

Конкретно в PEP 8 - рекомендации по оформлению Python-кода.
Для JavaScript есть рекомендации от Google (не только по оформлению, но и рекомендации общего плана): http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml.
Стараюсь им следовать.

Ja-Ja-Hey-Ho ★★★★
()
Ответ на: комментарий от AGUtilities

Почему-то всегда был уверен, что искусство программинга, это не красивого кода создание, а рационального, занимающего меньше ресурсов. Кстати, что касается вида, так у кода по сабжу очень хороший и читаемый вид, чтобы не говорили, его как-раз можно буквально читать, не вспоминая что там находится в 100500 переменных и как оно генерилось. Введенных переменных в коде используется всего две , правда используются и две введенных функции, но эти функции введены только потому, что используются в нескольких местах.

moscwich
() автор топика
Ответ на: комментарий от Ja-Ja-Hey-Ho

Как ни крути, очевидно Google те еще быдлокодеры.

moscwich
() автор топика

передел твоего кода на скорую руку

рабочесть не проверялась

почувствуй разницу, что называется:

function user_name() {
    var i;
    var ret = null;

    try {
        i = msg.getElementsByClassName("sign")[0].getElementsByTagName("a")[0];
    } catch (e) {
        ret = 'anonymous';
    } finally {
        ret = i.innerHTML;
    }

    return ret;
}

function convert_with_quotes(str, p) {
    var ret = null;

    if (p != "") {
        ret = "[quote]" + p + "[/quote]";
    } else {
        ret = ""
    };

    return ret;
}

(
    i = addbr("[quote=" + user_name()  + "]"
              + seltxt.toString().replace(
                  (/(?:>>-----Цитата---->>|^)(.*)<<-----Цитата----<</),
                  convert_with_quotes(str, p)
              )
	      + "[/quote]")

    obj.wrtSel (i, i.length);
)
AGUtilities ★★★
()
Ответ на: комментарий от AGUtilities

Как по мне, так сумбур. Тем более переменные с полными словами и подчеркиваниями не одобряю.

И про то что я говорил: читаю, вижу i, смотрю что есть i, натыкаюсь на user_name, понятно что это, но я-то отлаживаю/редактирую, так где она? А она у черта на куличиках, кручу вверх, убеждаюсь что там нет того что нужно, возвращаюсь к главному, читаю дальше, натыкаюсь на convert_with_quotes,... и опять кручу вверх...

moscwich
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.