1 Востаннє редагувалося FakiNyan (19.04.2024 20:31:24)

Тема: Вивчення Ruby & Ruby on Rails

Оце читаю зараз цей сайт/книгу https://bparanj.gitbooks.io/ruby-basics … _vars.html

і спершу помітив такий прекол

some_method = 3.method(:+)
some_method.call(5) // поверне 8

тобто, воно по факту створює метод, який зав'язаний на інстансі конкретного клясу Integer, який має значення 3.

Потім подивився на

3.methods

і воно показало мені величезний список методів, які висять на клясі Integer, і серед них були -, + і всяке таке. І от виявилось, шо +, - та інші оператори по факту є методами... Тобто, мона їх самому писать.

class Bread
  def initialize
    puts 'Bread created'
  end

  def +(other)
    return unless other.is_a?(Butter)

    puts 'creating a sandwich with bread and butter...'
    Sandwich.new
  end
end

class Sandwich
  def initialize
    puts 'Sandwich created!'
  end
end

class Butter
  def initialize
    puts 'Butter created'
  end
end

bread = Bread.new
butter = Butter.new
result = bread + butter

виведе

Bread created
Butter created
creating a sandwich with bread and butter...
Sandwich created!

2

Re: Вивчення Ruby & Ruby on Rails

COBOL щойно обійшов Ruby в рейтингу TIOBE
І так, у Python теж можна

adder = (2).__add__ #якщо без дужок, то це float буде
print(adder(3)) #5

робити.

3

Re: Вивчення Ruby & Ruby on Rails

koala написав:

COBOL щойно обійшов Ruby в рейтингу TIOBE
І так, у Python теж можна

adder = (2).__add__ #якщо без дужок, то це float буде
print(adder(3)) #5

робити.

А visual basic як високо в тому рейтингу, тре вчить.

4

Re: Вивчення Ruby & Ruby on Rails

я тіки шо таке взнав...
Виявляється, коли ми описуємо кляс в рубі, то це не опис клясу, а створення об'єкту справжнього клясу, який так і зветься - Class.

class Bebra
end
# те саме шо і 
Bebra = Class.new

і якшо наш кляс має якісь методи

class Bebra
  def say_hi
    puts 'hi'
  end
end

то екземпляри цього клясу зможуть використовувати оці методи, але самі методи не будуть копіюватись на екземпляри клясу, і при їх використанні той екземпляр буде посилатись на методи, які існують лише на самому класі

b = Bebra.new
b.say_hi
# say_hi знаходиться на Bebra, а не на b

Але це фігня...

Ми можемо створювати т.з. статичні методи на самому клясі, ось так

class Bebra
  def self.say_bye
    puts 'bye bye'
  end
end

і їх мона використовувати як і всюди

Bebra.say_bye

але де знаходиться цей метод? На клясі? Тоді екземпляри теж зможуть його використовувать, а вони не можуть.

ВІдповідь - Eigenclass !!!

5 Востаннє редагувалося FakiNyan (25.02.2024 22:21:34)

Re: Вивчення Ruby & Ruby on Rails

так от, цей Eigenclass - це якийсь мета-кляс, який містить на собі статичні методи, і він ніби існує десь поза межами часу та простору, паралельно з самим клясом Bebra. Можна було б сказати, шо це ніби форма класу Bebra, як у Платона, але це не так, просто ідея така в голові з'явилась, от і написав  *PARDON*

і це ше не все...
Ми можемо визначати подібні статичні методи не лише для клясів, але й для екземплярів клясів!!!!

bebra = Bebra.new # створили екземпляр клясу Bebra
def bebra.say_something
end
# тепер екземпляр клясу Bebra має метод say_something, але сам кляс Bebra та інші його екземпляри не мають

нафіга звичайним об'єктам створеним з визначених раніше клясів якісь додаткові методи, які додаються після створення тих екземплярів? кажуть, шо це "гнучкість", і десь комусь і треба.

6

Re: Вивчення Ruby & Ruby on Rails

почав вже читати частину про метапрограмування, і поки шо воно зрозуміліше ніж те, шо я колись читав про Nim, бо там було якесь lift the function, чи шось подібне зі словом lift, чого я геть не вдуплив, а в Рубі тут поки шо починається з гуків, які викликаються, коли щось відбувається.
Наприклад, якщо у нас є клас Людина, і ми створюємо клас Підлюдина, який наслідує Людину, то Людина може бути повідомленою, що клас Підлюдина почав наслідувати клас Людина.
Мабуть, це завдяки тому, що при описі класу

class Human ...

ми не просто описуємо його, а створюємо реальний об'єкт, який вже може мати свої функції і т.д. Тому можу припустити, що під час наслідування

class Subhuman < Human

в класі Human просто викликається якийсь метод, в який передається Subhuman.

7

Re: Вивчення Ruby & Ruby on Rails

наче більш-менш роздупливсь з цьою мовою, тепер буду починать вивчать rails

Подякували: Tarpan871

8

Re: Вивчення Ruby & Ruby on Rails

Зараз роздупляюсь із шляхами (routes), і так незвично бачити, шо форма для створення ресурсу - це додатковий GET шлях, і він просто повертає сторінку, яка дозволяє заповнити форму, а потім відправити її на інший, POST шлях.
В SPA там чітке розділення - шляхи для інтерфейсу на клієнті, а шляхи для відправки/отримання інформації на сервері.

9

Re: Вивчення Ruby & Ruby on Rails

Алярм! Алярм! Нове відкриття!
Тільки що помітив, що коли наводжу курсор на якесь покликання на своїй сторінці, то в логах серверу бачу, як він відправляє дані. Виявляється, це є якась фіча Ruby on Rails, яка зветься `turbo-prefetch`, і воно додає слухача події `mouseenter` до покликань, і робить запит до серверу.
Я ще не знаю, нашо і чому, але гадаю, шо воно робить цей запит, бо якщо користувач наводить курсор на покликання, то він може мати на меті натиснути його, і якщо ми відразу зробимо запит, то він відбудеться за лаштунками, і закешується переглядачем, і коли ми вже дійсно натиснемо на покликання, то переглядач моментально покаже нам ту сторінку, і не треба чекати на її завантаження.

Подякували: flatliner, leofun012

10

Re: Вивчення Ruby & Ruby on Rails

хтось може мені пояснити, шо тут робиться, і нашо?
звідси https://guides.rubyonrails.org/action_c … nd-filters

For example, in a website where changes have an approval workflow, an administrator could preview them easily by applying them within a transaction:

class ChangesController < ApplicationController
  around_action :wrap_in_transaction, only: :show

  private
    def wrap_in_transaction
      ActiveRecord::Base.transaction do
        begin
          yield
        ensure
          raise ActiveRecord::Rollback
        end
      end
    end
end

шо це означає? як адмін може шось переглянути, якшо в базі даних нічо не зберігається?

11 Востаннє редагувалося ostap34PHP (13.10.2024 02:31:39)

Re: Вивчення Ruby & Ruby on Rails

Це ж як функція-декоратор. Там так і пише в прикладі - "загорнути у транзацію". Відповідно тепер метод show буде виконувати все що йому треба до бази всередині транзакції.

Бо yield у Ruby це ключовик який запускає передану анонімну функцію, яка, в даному випадку є методом show. Також рубісти анонімні функції називають "блок" / "block". (але лямбди все ж лямбдами)

Питайте ще щось

Подякували: leofun011