Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ruby = Perl + ООП / 5 сообщений из 5, страница 1 из 1
17.06.2013, 12:22
    #38299746
Gysgys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ruby = Perl + ООП
Писал долгое время на Perl, сейчас решил поменять технологии, нужен хороший вебфреймвёрк, стал выбор Ruby и ROR или python и django. И т.к. с питоном я уже был знаком, решил посмотреть на руби как на язык программирования. Меньше чем за час пролистал книжку(Фитцджеральд М. - Изучаем Ruby - 2008) понял, что полностью ориентируюсь во всём материале, что там написан, даже не читая его. Ruby - это тот-же Perl только с ООП, кст в книге этой ООП затронут мало. С одной стороны это сходство радует, легко пересаживаться, с другой стороны всё то от чего я бежал с Perl'a частично присутствует в Ruby. Может изощрённые рубисты поправят меня?
Кст, а есть ли в руби что-то типо use strict ? Мне необходимо явное объявление переменных и выдача ошибки, если происходит обращение к переменной не объявленной предварительно.
...
Рейтинг: 0 / 0
17.06.2013, 13:55
    #38299948
рубист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ruby = Perl + ООП
Gysgys,

Ruby = Perl + Smalltalk + Eiffel + Lisp

В Ruby много ООП от Smalltalk и Eiffel, но и очень много от функционального языка Lisp.

На Perl не писал, но на сколько я знаю Perl позволяет включить строгий режим, почти как у языков со статической типизацией. В Ruby этого нет, здесь типизация только динамическая.

Use strict нет, но в Ruby нельзя использовать не обьявленную или не инициализированную переменную, будет ошибка ….
>a_var=b_var+1
NameError: undefined local variable or method `b_var' for main:Object
по переменной a_var ошибки не будет, так как инициализировать переменные можно и вырожением.

Хоть Ruby и вобрал в себя много от Perl, я думаю по возможностям он больше похож на Python чем на Perl.
...
Рейтинг: 0 / 0
17.06.2013, 16:23
    #38300319
Gysgys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ruby = Perl + ООП
рубистGysgys,

Ruby = Perl + Smalltalk + Eiffel + Lisp

В Ruby много ООП от Smalltalk и Eiffel, но и очень много от функционального языка Lisp.

На Perl не писал, но на сколько я знаю Perl позволяет включить строгий режим, почти как у языков со статической типизацией. В Ruby этого нет, здесь типизация только динамическая.

Use strict нет, но в Ruby нельзя использовать не обьявленную или не инициализированную переменную, будет ошибка ….
>a_var=b_var+1
NameError: undefined local variable or method `b_var' for main:Object
по переменной a_var ошибки не будет, так как инициализировать переменные можно и вырожением.

Хоть Ruby и вобрал в себя много от Perl, я думаю по возможностям он больше похож на Python чем на Perl.
Нет в Perl типизация тоже динамическая, можно наложить определённые ограничения,но они не касаются типов как таковых.
Вот пример есть у нас некая переменная $gys и много кода связанного с ней а в кокомто месте вместо $gys = Gys->new(); Я написал $gus = Gys->new(); тоесть явно не то, что хотел сделать. Так вот в Perl'e указав use strict; все переменные должны быть объявлены явно с указанием модификатора области пременной, а по факту в 99% это my и при создании мы пишем my $gys; если в коде дальше я напишу $gus = ... то получу ошибку.

Python точен, а в Ruby как и Perl я вижу множество подходов к написанию одних и тех-же действий, причём в Ruby появляется ещё целая куча методов встроенных классов которые дублируют друг-друга, сами название методов во многом совпадают c такими в Perle, использование допольнитех символов декораторов берущих на себя особые функции - тоже Perl подход, куча магических переменных типо всяких $' $/ $1 и т.д. , пост условия var_a = 5 unless var_b < 10, вызов функций\методов без скобок для передачи параметров
...
Рейтинг: 0 / 0
17.06.2013, 17:05
    #38300399
рубист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ruby = Perl + ООП
Gysgys.........
Вот пример есть у нас некая переменная $gys и много кода связанного с ней а в кокомто месте вместо $gys = Gys->new(); Я написал $gus = Gys->new(); тоесть явно не то, что хотел сделать. Так вот в Perl'e указав use strict; все переменные должны быть объявлены явно с указанием модификатора области пременной, а по факту в 99% это my и при создании мы пишем my $gys; если в коде дальше я напишу $gus = ... то получу ошибку.

Нет, в Ruby так нельзя сделать, нужно контролировать самому. Но при использовании внятного редактора (я использую Aptana Studio) такие опечатки сразу видны.

GysgysPython точен, а в Ruby как и Perl я вижу множество подходов к написанию одних и тех-же действий, причём в Ruby появляется ещё целая куча методов встроенных классов которые дублируют друг-друга, сами название методов во многом совпадают c такими в Perle, использование допольнитех символов декораторов берущих на себя особые функции - тоже Perl подход, куча магических переменных типо всяких $' $/ $1 и т.д. , пост условия var_a = 5 unless var_b < 10, вызов функций\методов без скобок для передачи параметров

Да, разработчики Ruby пропагандируют подход "одно и тоже можно сделать несколькими способами" в отличии от Python, где главный принцип "Должен существовать один — и, желательно, только один — очевидный способ".
Нельзя точно сказать какой из этих подходов более правильный. Везде есть свои доводы, почему делается именно так.
По этому выбирать нужно то, что самому ближе, интересней, удобней.
...
Рейтинг: 0 / 0
18.06.2013, 08:27
    #38300912
madbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ruby = Perl + ООП
в свое время тоже выбирал, на что уходить с перла.
пробовал питон, но не поперло - не хватает tmtowtdi и синтаксис более непривычный.
в итоге ушел на руби, доволен как слон.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ruby = Perl + ООП / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]