LINUX.ORG.RU

Ruby прекрасен

 , , ,


1

6

Раньше на скриптоте вообще не писал (питон всегда отпугивал своим видом, а эру расцвета перла я пропустил), а тут попалась книжка по руби и я прям влюбился. Ну это ж чудо, а не язык. Он точно не умрет в близком будущем (с загибанием рельсов), имеет смысл его не спеша постигать?

★★★

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

Еще раз, для особо сообразительных.

p Integer
  .all
 ...
Тут есть объект, есть сообщение. В твоем коде где объект и где сообщение?

anonymous
()

Толсто.

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

Скрипт простой тебе показали, чтобы ты не запутался в 2-х соснах, но ты умудрился и тут запутаться. Смысл этого примера не в том, чтобы сделать что-то со списком, не в результате, а в том, что ты можешь легко создать объект, и расширить его, как хочешь, блеать, а не просто тупо проитерировать. Если есть, допустим, у какого-то ленивого списка, метод selectPalindrom, то его будут наследовать дочерние объекты. Впрочем, откуда знать пистонобыдлу про проектирование и ООП, ему главное список продрочить, чтобы выхлоп был такой-же, как в оригинале.

anonymous
()

Ну это ж чудо, а не язык

Это примерно как D: на бумаге круто, а на практике батареек дефицит. Ну и написать на этом что-то не тормозящее еще сложнее, чем на питоне.

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

Ну все-все, не буянь. Пойди лучше напиши «Enterprise Helloworld Design Techniques with Ruby: Generating a Neat DSL To Solve Any One-line Problem», бгггггг.

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

Если есть, допустим, у какого-то ленивого списка, метод selectPalindrom, то его будут наследовать дочерние объекты. Впрочем, откуда знать пистонобыдлу про проектирование и ООП, ему главное список продрочить, чтобы выхлоп был такой-же, как в оригинале.

Бгг, композиция на манкипатчинге. Там где рубисты не могут без сообщений, питонисты просто используют функциональщину и настоящие абстракции, а не пародию на smalltalk. В одной функции `len` больше высокоуровневости, чем во всем руби вместе взятом.

Хотя хипстоте надо же на что-то дрочить, и «Ъ»-ООП не самое плохое, пожалуй.

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

Зачем писать так сложно?


(defn palindrome [n]
  (= n (reverse n)))

(->>
  (range)
  (filter #(and (-> % str palindrome) (= 0 (mod % 3))))
  (take 10))

(0 3 6 9 33 66 99 111 141 171)
Debasher ★★★★★
()
Ответ на: комментарий от Debasher

К тебе это тоже относится. Ты написал аналог пистонячего говнокода, где просто выдрачивается список. Это не аналог рубевского кода.

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

А с каких это пор лисп начал уметь в полноценное рантайм-метапрограммирование?

Примерно с 1959 года?

И с каких пор там появилось полноценное смоллток-like ООП?

Оно там появилось гораздо раньше великого и могучего CLOS: http://en.wikipedia.org/wiki/Flavors_(programming_language)

Но индустрии больше CLOS оказался нужен.

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

С таким же успехов почти все языки - недолиспы

уточню, все 'динамические' языки точно.

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

Примерно с 1959 года?

После появления схемы в 77, все закончилось. Что было — то прошло.

CLOS

В CLOS не смолток-like ООП.

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

Это не аналог рубевского кода.

От того что он заманкипачил (за это кстати можно и пальцы отсечь) функцию в Integer код не становится невыдрачиваем списка, лалочка.

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

Да. У тебя код плохой потому что читается не слева направо. Двойка, переписывай.

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

кто-то до сих пор пишет на коболе

И зашибает на этом кровавые баксы, в отличие от корундового языка.

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

Оттого, что ты там что-то высрал на своем недоязыке, он не становиться равным нормальным языкам, типа смоллтока, руби, Io и тд.

anonymous
()

love

Моя давняя мечта: чтобы большая часть тредов по этому тегу были про love2d - движок для 2D-игр на lua. Пока только один.

sevenredlines
()
Ответ на: комментарий от Shadow

Таки while со счётчиками и понимание конкретной работы orm. Но в идеале да, итерирование.

В питоне есть две конструкции цикла: с проверкой некоего условия при каждой итерации (while) и обход итератора (for-in). for-in принимает объект, неявно вызывает его метод __iter__ (для встроенных типов вызывается iter(<obj>)), чтобы получить итератор по этому объекту, и работает уже с ним. Цикл while, КМК, ооочень редко применяется (и его можно довольно легко заменить на for-in), поэтому под циклом в питоне как правило подразумевается итерирование, что я и написал.

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

Оттого, что ты там что-то высрал на своем недоязыке, он не становиться равным нормальным языкам, типа смоллтока, руби, Io и тд.

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

Я же всего-лишь обычный работяга, мне не под силу писать на жс.

Debasher ★★★★★
()

перл прекрасен. руби — недоязычек. Постигать руби есть смысл только если он нужен по работе.

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

Так и есть. Правда с завозом S-выражений уже полноценный лисп получается.

Написание кода на любом языке есть сублимация написания кода на лиспе!

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

перл прекрасен. руби — недоязычек.

что может перл чего не может руби? что есть в перле чего нет в руби? что производительнее - перл или руби?

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

После появления схемы в 77, все закончилось. Что было — то прошло.

Чего прошло? В общелиспе метакластеры парадигм свободно применяются и в рантайме. Изменить нельзя очень мало вещей. Если забить на портабельность и корячить одну реализацию, то неизменяемого вообще почти ничего нет.

В CLOS не смолток-like ООП.

Я приводил ссылку на страницу с Flavors на википедии. Flavors был до CLOS. Почему в ANSI попал CLOS, хорошо написано у Франца.

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

метакластеры парадигм

Ага, ты забыл еще моноиды в категории пердофункторов. Напиши на общелиспе (или на схеме) аналог вот такого кода на Io:


unless := method(
  if(call evalArgAt(0), call evalArgAt(2), call evalArgAt(1))
)

function := method(
 args := call message arguments
 lst :=list(call evalArgAt(1)) append (args at(2)) append (args at(3))
 doMessage(performWithArgList(args at(0) asString, lst))
)

function(if, 1>2, 1 print, 2 print)
function(unless, 1>2, 1 print, 2 print)

# out:
# 21

anonymous
()

так как в этой теме есть много специалистов по Ruby...

...то можно я спрошу кой-что?

допустим у меня есть 4 модуля:

«module_A», «module_B», «module_C», «module_D»

модуль «module_B» — использует в своём коде — обращения к функциям-и-классам модуля «module_A» .

модуль «module_C» — использует в своём коде — обращения к функциям-и-классам модуля «module_B» . но не использует (напрямую не обращается) к функции-и-классам модуля «module_A» .

модуль «module_D» — использует в своём коде — обращения к функциям-и-классом модулей «module_A», «module_C». но не использует (напрямую не обращается) к функции-и-классам модуля «module_B» .

вопрос:

как сделать (в Ruby) чтобы модуль «module_C» — импортировал бы ТОЛЬКО то что есть внутри модуля «module_B» , но НЕ импортировал бы ни чего больше? то есть чтобы он НЕ знал бы ни чего про модуль «module_A» .

и как сделать чтобы модуль «module_D» — не знал бы ни чего про модуль «module_B» ? а импортировал бы только: «module_A» и «module_C» ?

пример на языке Python

(для того чтобы было бы понятно что я хочу от Ruby!)

# модуль "blahblah.module_A"

def func_A1(x):
    print(2**x)

def func_A2(x):
    print(4**x)
# модуль "blahblah.module_B"

from . import module_A

def func_B1(x):
    module_A.func_A1(x)
    module_A.func_A1(x+1)

def func_B2(x):
    module_A.func_A2(x)
    module_A.func_A2(x+1)
# модуль "blahblah.module_C"

from . import module_B

def func_C1(x):
    module_B.func_B1(x)
    module_B.func_B1(x+2)

def func_C2(x):
    module_B.func_B2(x)
    module_B.func_B2(x+2)
    
# модуль "blahblah.module_D"

from . import module_A
from . import module_C

def func_D1(x):
    module_A.func_A1(x)
    module_C.func_C1(x+1)

def func_D2(x):
    module_A.func_A2(x)
    module_C.func_C2(x+1)

надеюсь суть ясна! :)

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 2)
Ответ на: комментарий от anonymous

Ага, ты забыл еще моноиды в категории пердофункторов.

У тебя до сих пор горит от того что не смог монады осилить? Продолжай закидывать уютненький своими высерами на io и js до посинения, но в абстракции так и не сможешь.

bj
()
Последнее исправление: bj (всего исправлений: 1)
Ответ на: комментарий от erzent

Именно поэтому он никогда не заменит PHP:) PHP - простой язык для простых людей. Его популярность(как и популярность оффтопика) базируется на том, что его не так сложно освоить, как другие скриптовые ЯП. Ну и плюс, под него много готового кода, который можно только чуток допилить.

lucentcode ★★★★★
()

Он точно не умрет в близком будущем

рест ин пис

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от lucentcode

PHP - простой язык

Вранье.

не так сложно освоить, как другие скриптовые ЯП

Что сложного в других скриптовых ЯП?

Deleted
()

«module_A», «module_B», «module_C», «module_D»

В Ruby модули являются константами и все константы обязательно начинаются с большой буквы, поэтому я назвал их иначе.

module Blahblah
  module A
    extend self

    def func_A1(x)
      print(2**x)
    end

    def func_A2(x)
      print(4**x)
    end
  end

  module B
    extend self

    def func_B1(x)
      A.func_A1(x)
      A.func_A1(x+1)
    end

    def func_B2(x)
      A.func_A1(x)
      A.func_A2(x+1)
    end
  end
end

module C
  extend self
  B = Blahblah::B

  def func_C1(x)
    B.func_B1(x)
    B.func_B1(x+1)
  end

  def func_C2(x)
    B.func_B1(x)
    B.func_B2(x+1)
  end
end

module D
  A = Blahblah::A

  def func_D1(x)
    A.func_A1(x)
    C.func_C1(x+1)
  end

  def func_D2(x)
    A.func_A2(x)
    C.func_C2(x+1)
  end
end
Anatolik ★★
()
Ответ на: комментарий от Deleted

PHP - простой язык

Вранье.

не так сложно освоить, как другие скриптовые ЯП

Что сложного в других скриптовых ЯП?

Получается пхп сложный, а остальные скриптовые ЯП простые?)

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

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

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

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

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

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

Я понял. Вот и показал, что то, что делается в Python деревом директорий, в Ruby делается деревом констант.

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

Так у него все модули в одной директории.
Думаю ему вот такое нужно

module A
  extend self

  def a1
    puts 'a1'
  end
end
class Module
  def import(file)
    class_eval(IO.read file)
  end
end

module B
  extend self
  import 'a.rb'

  def b1
    puts 'b1'
  end

  def b2
    A.a1
  end
end

B.b1 # b1
B.b2 # a1
A.a1 # uninitialized constant A (NameError)

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

Да да, когдато с перла и переписали метасплоит на руби ))

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

itertools - это не чистый python?

может быть, functools в тройке - тоже не чистый python? :) во втором эти функции были чистыми, а в третьем вдруг загрязнились :)

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

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

чё? и ruby и python однозначно проще. популярность (как и популярность офтопика) связано с тем, что он активно впихивался через каждую табуретку.

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

Зачем?

Затем, что ты тут пытался утверждать, что лисп, якобы, может все то же самое, что Ъ-динамичные языки. Lol, кастрат который не умеет в ленивые ф-ции, в котором даже нет нормального ООП, что-то там может. Не смеши народ, он может не намного больше чем жаба, или какой-нибудь сраненький хаскель. .

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