Как лучше всего использовать переменную в Ruby?

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

Поскольку я не совсем понимаю, вот два момента, о которых я говорю:

# from another class, could be called with the following syntax : 
# className.new('some params').create

def initialize(params)

 @params = params
end

def create

  File.open 'data.csv', 'a+' do |file|
    file.write @params
  end
end

# usage : className.new('some params').create

Другой возможный метод - создать экземпляр класса и передать все параметры путем вызова функции create.

def initialize
end

def create(params)

  File.open 'data.csv', 'a+' do |file|
    file.write params
  end
end

# usage :
  class_instance = className.new
  class_instance.create 'some params'

С вашей точки зрения, какой метод следует использовать окончательно? В кейсе не хватает производительности? Какие риски при использовании того или иного метода?

Последний вариант лучше, плюс метод create должен быть методом класса (статическим).

Aleksei Matiushkin 15.11.2018 10:43

Не могли бы вы аргументировать, почему последнее лучше?

Atille 15.11.2018 10:46

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

Aleksei Matiushkin 15.11.2018 10:47

Верно ли это в случае множественных вызовов? Я имею в виду использование create(params), а затем функции mail(params) из того же класса? Мне пришлось бы обновить две или более информации из моего скрипта, чтобы сделать его правильным, вместо простого обновления моей функции initialize ().

Atille 15.11.2018 10:55

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

Aleksei Matiushkin 15.11.2018 10:57

Спасибо за ответы, сегодня кое-что узнал;)

Atille 15.11.2018 10:58

Если вы используете @params во всем классе, например. create, mail, log и т. д., тогда ваш первый подход имеет смысл, если вы просто используете метод create для записи их в файл, и все, тогда я соглашусь с @AlekseiMatiushkin (кстати, я скучаю по mudasobwa :)

engineersmnky 15.11.2018 18:18

может ли наследование от класса File быть хоть сколько-нибудь полезным в этом случае? classNew#create - это просто File#open {|file| block}? Читал метод File.open, но плохо разбираюсь в C++

Fabrizio Bertoglio 16.11.2018 10:55
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
1
8
46
0

Другие вопросы по теме