> Мы уже выяснили что тут RoR и Django велосипедописатели, всё пишут только сами, по 10 раз.
Что-то я не понял, что это ты выяснил? Ты мне показал хоть один достойный фреймворк на пхп??? Не лги, потому что если бы он был полгода назад, я бы еще может и сидел на пхп... Но именно отсутствие какой-либо инициативы по созданию оного была одна из главных причин, почему я перешел на рельсы.
Только не говори, что тот пиировский зоопарк из квик-форма можно назвать фреймворком. Так, набором костылей. Потому что ни коробочной реализации распаршивания урлов, ни шаблонов, ничего. Все приходится тулить из чего попало.
Вам уже сказали, что вы умрёте, а всё туда же, кейс, кейс. Без кейса никак? Кейс и расширяемость несовместимы. Кейс в ООП противопоказан (или руби с питоном уже процедурные языкы? Тоды ок.)
Чем программист отличаетсо от быдлокодера? Быдлокодер любит вставлять куда надо и куда не надо термины, смысл которых он представляет себе весьма своеобразно, и всячески ими жонглирует. Программист же знает терминологию, но бравировать ей не лезет.
> Тут пока различие некритично.
И я так считаю. Зачем тогда писать?
> В ПХП можно вставить только переменную:
объект, массив, скаляр. В Руби можно вызвать функцию или метод,
Не совсем верно. Вызов функции в строку на php вставить можно:
$x = create_function('', 'return "bla";');
echo "bla{$x()}bla\n";
В Heredoc так же можно сделать ;)
define("BLA", 'bla');
$c = 'constant';
$str = <<<__TEXT__
Бла, бла, {$c("BLA")} константы понимать!
Могу использовать НЕ только переменные {$var}.
Отступ прекрасно понимается.
__TEXT__;
Ок, согласен, криво. Но на вселенскую проблему не тянет!
> PHP $regexp = '/hell \/\' with symbol';
Что мешает написать $regexp = "|hell /' with symbol|";
Короче, ты видишь, насколько хромают твои знания в php? Ну, согласись,
нельзя плохо отзываться о том, чего не знаешь.
> Кейс и расширяемость несовместимы. Кейс в ООП противопоказан (или
> руби с питоном уже процедурные языкы? Тоды ок.)
Слушай, я что, сказал, что его нужно тулить куда попало? Или ты где-
то видел, что я про это писал? Я так понимаю месье намекает на
полиморфизм?
Ну тогда решите следующую задачу с помощью РЕАЛЬНЫХ, ПАЦАНСКИХ ООП-
шных конструкций. У меня в базе хранится длина файла в байтах. Я хочу
вывести ее в "человеческом" виде. Тоесть если число близко к
мегабайту - в мб, если к килобайтам -кб, гигабайты Гб.
Ниже я приведу пример решения на кейсе и жду ответного ЛУЧШЕГО
решения на ТРУ ООП!
def format_size(size)
size = size.to_f
"%.2f %s" % case size
when 0...1024 : return size.to_i.to_s + " B"
when 1024...102400 : [(size / 1024), "kB"]
when 102400..104857600: [(size / 1024 / 1024), "MB"]
else [(size / 1024 / 1024 / 1024), "GB"]
end
end
>2) Строки: PHP: $str = "Test bla bla {$var} bla"; Ruby: str = "Test bla bla #{construction} bla"
>А вот здесь уже видно разницу. В ПХП можно вставить только переменную: объект, массив, скаляр. В Руби можно вызвать функцию или метод, по сути поставить любую конструкцию.
А если имеете ввиду прямо между кавычаки засунуть вызов функции, то да это мега фича, без ней жить нельзя и надо срочно перезжать на руби. Тем более тут все противники php любят писать про никакую типизацию, интерестно что они про это напишут.
Тем более всегда можно написать "fdgdfg".myfunc()."fgdfg"
ЗЫ Большинство что здесь показывают, якобы из достоинств языка практически ничего не стоит.
> спор заведомо проиграшный для пхп. Потому что я его знаю очень хорошо. И не смотря на свои наработки и хорошее знание языка, я оставил это и решил двигаться дальше. Хватило смелости сделать это. А вам, все еще лихорадочно цепляющимся за, те мнимые преимущества что у вас пока еще есть хватит смелости оставить все и выучить что-то новое. Но и что-то более эффективное? :))
Как только мне покажут реальное преимущество, а не фигню типа я напишу это в 10 символов а вы в 11, или я напишу это так, а Вы по другому, а мне нравиться писать как я пишу спор заведом проигрышный для Вас.
> А если поля класса "размазаны" по нескольким таблицам?
Я использую соглашение: одна таблица - один класс. Или наоборот.
Первичен класс с описанием структуры таблицы. Отношения между
таблицами описываются внутри таких классов. Именно объект класса
создаёт и изменяет таблицу, а не пассивно подстраивается под готовую,
созданную руками.
> Ты мне показал хоть один достойный фреймворк на пхп??? Не лги, потому что если бы он был полгода назад, я бы еще может и сидел на пхп... Но именно отсутствие какой-либо инициативы по созданию оного была одна из главных причин, почему я перешел на рельсы.
Не пускай пузыри, тебя никто обманывать не собирается. Где был вопром про фреймоворк на пхп? Для чего? Особенно учитывая что пхп не нужен фреймворк для работы под WEB. И где ответы на мои вопросы показать хотя бы 4 CMS на ryby.
ЗЫ Видимо и пересел на руби потому что не смог внятно для себя решить для чего тебе фреймвок под пхп.
> Вам уже сказали, что вы умрёте, а всё туда же, кейс, кейс. Без кейса никак? Кейс и расширяемость несовместимы. Кейс в ООП противопоказан (или руби с питоном уже процедурные языкы? Тоды ок.)
В питоне уже появился кейс? А ну марш учить увлекательную матчать, прихлёбывая горький холодный йад из большой кружки.
> Прямо таки ТРУЪ ? > А гвозди вы тоже микроскопом забиваете?
Ну вот видишь, нет полиморфизма. Так зачем гавкать, на то, что используется к месту? Ты сделал невнятную мешанину из императивной логики. Я, в декларативном стиле описал, что я хочу. Логика понятна и очевидна.
Поэтому про кейс нечего тут галдеть, всему свое место.
Правильно. Как нет и кейса. Я не забиваю гвозди микроскопом и не палю из гранатомёта по воробьям.
> Логика понятна и очевидна
Угу =) Ваша "логика" мне напоминает стиль vb-программистов. Или дельфистов-ньюбов, которые формочки в редакторе рисуют, и считают, что программа готова.
> Что мешает написать $regexp = "|hell /' with symbol|";
Согласен.
> Короче, ты видишь, насколько хромают твои знания в php? Ну, согласись, нельзя плохо отзываться о том, чего не знаешь.
Нормал, согласен насчет хиредока функций и констант.
Насчет отступа ты не понял. Имеется ввиду, что в руби можно сделать хиредок с отступом, который не будет в самой строке. Тоесть те строки на руби и пхп хиредока были одинаковые. Этой фишки в пхп нету. Насчет констант и функций мне понравилось, согласен что провтыкал.
Насчет синтаксических конструкций ты проигнорировал, но тут я сам могу тебе дать ответ. Можно криво через ивал, используя костыль с $func().
Ладно, разменялись.
ООП.
1) Нету неймспейсов.
2) Автоматическое создание сеттеров-геттеров.
PHP: можно сделать через магические функции в php5. Но тут уже нужно учесть, что пятерка в плане хостинга сливает 4.
Ruby: строка
attr_reader :field1, :field2, :field3
создает сразу возможность обращение к филду через:
obj.field1 и т.п.
Аналогично attr_writeble :fieldx - создает сеттер в виде
obj.fieldx = 'xx'
3) Миксины
Можно создать модуль специальных методов и подинклудить их к любому классу. Таким образом не нужно множественного наследования, как в плюсах.
В пхп нет.
4) Стоит задача. Есть абстактный фреймворк. Вам в нем все нравится, но в одном классе нужно поменять поведение. Например чтобы перед вызовом метода бла, вызывался метод бла2, а уже потом отрабатывался метод бла.
PHP: вообще подобную функциональность можно очень криво реализовать в пхп (и только пятом) только через магический метод, но при условии, что метод неопределен. Тогда можно перехватить к нему обращение.
Но у нас задача, чтобы сделать это для заданного метода.
Ruby: используя констункцию alias_method я могу реализовать базовые фишки АОП - выполнить нужный код до и после метода.
5) Есть возможность переопределить методы: +, [], <, > и т.п.
Вывод сделайте сами.
На практике метод << для строк добавляет кусок к строке, для массивов добавляет элемент к концу массива. А символы + - / используются для создания математических операций над множествами для обычного массива.
Все эти неймспейсы, алиасы и т.п. очень хорошо и красиво. Но. Если вам это понадобилось в веб-приложении, то вы идёте и берёте язык, который это умеет, если такое позволит заказчик.
Я вам могу сказать, что и руби и пхп сливают по полной сям, потому что в них нельзя делать _asm {}. Фтопку руби и пхп?
А мне искренне жаль тех кто начинает программировать с рисования формочки в дельфе, в большинстве случаев на то что дальше получается без содрогания смотреть нельзя.
Нет. Я хочу сказать, что ньюбы, "программировавшие" на вб и дельфи с помощью рисования формочек (раскидывания по ним кнопочек, чекбоксиков и табличек) мало чем отличаются от аналогичных "горячих" адептов рубей. Кроме того, что в массе вымерли (но не все).
Про сами языки я ничего не говорил. У вас что-то с логикой? А вы-то сами не женщина?
> Ниже я приведу пример решения на кейсе и жду ответного ЛУЧШЕГО
решения на ТРУ ООП!
@Number_in_human_readable[$number]
$num[
val text
0 " "
1024 " kB"
102400 " MB"
104857600 " GB"
]
$result[^num.menu{^if($lenght%$num.val){[^lenght.format[%.2f] $num.val}]
Числа ваши. Достоинства решения сказать или сами найдете?
ЗЫ решение не проверял ;)
ЗЫ Я не пойму, мы тут говорим о красивости языка или о том, какой язык лучше?
>Или продолжайте пользоваться ПХП, раз вам нравится ПХПшный стиль.
В отличии от некоторых я не люблю изобретать велосипеды. И если появится продукт, который позволит с ним работать не делая этого, и при этом будет эффективным - я легко перестану пользоваться каким-то другим продуктом.
Но для этого нужно знать этот альтернативный продукт.
Садиться и тратить неделю на детальное изучение десятков нынешних кандидатов - оставьте это студентам.
А если есть коммьюнити, где (вроде бы) собрались люди, этот продукт знающие, почему бы и не спросить некоторые особенности. Чтобы можно было оценить, требует ли продукт более тщательного изучения.
Пока, по результатам дискуссии, я вижу только что можно с очень низким приоритетом заняться рассмотрением Django. RoR пока себя вообще не проявил никак.
Сразу ассоциация - dos2unix не сделали и в MC смотрим...
Нет, ну как можно с таким синтаксическми шумом работать?? И кто-то когда-то смел говорить, что шума в Си много (в сравнении с Паскалем)? Посмотрели бы они на эти иероглифы... :D
> Я, в декларативном стиле описал, что я хочу. Логика понятна и очевидна.
Нет изящества, конструкция квадратная ;-(
В php я бы написал примерно так:
function format_size(size) {
return ($size<1024 ? $size ." B": ($size<1024*1024 ? $size/1024 ." K": $size/1024/1024 ." M")); }
Вместо твоего монстра:
def format_size(size)
size = size.to_f
"%.2f %s" % case size
when 0...1024 : return size.to_i.to_s + " B"
when 1024...102400 : [(size / 1024), "kB"]
when 102400..104857600: [(size / 1024 / 1024), "MB"]
else [(size / 1024 / 1024 / 1024), "GB"]
end
end
Особенно "порадовал" size.to_i.to_s.
> Нет, ну как можно с таким синтаксическми шумом работать??
Дык...
$result[
^num.menu{
^if($lenght%$num.val>1){
^lenght.format[%.2f] $num.text
}
}
]
Просто тут принято писать в минимальное количество символов...
ЗЫ - написал нормально - три ошибки нашел :)