2013-12-18 3 views
1

Допустим, у вас есть метод, который присваивает переменной на вызов метода в конце:Присвоение переменной на последнем ППР

def this_method(x) 
    x = x + 5 
    x = some_method_like_multiply_by_two(x) 
end 

и аналогичный метод, который не имеет назначение переменной:

def this_method(x) 
    x = x + 5 
    some_method_like_multiply_by_two(x) 
end 

Какой из них лучше? Нужно ли иметь x = в последнем утверждении метода? Является ли первый яснее? Ставит ли второй риск ввести больше ошибок тем, кто читает код, потому что они могут не знать, что он что-то делает с x? Какой из них является правильным способом кодирования? Когда я хочу использовать первый стиль (несмотря на то, что переменная отображается как неиспользованная в анализе кода)?

ответ

2

Почему бы не упростить жизнь еще дальше и сделать:

def this_method(x) 
    some_method_like_multiply_by_two(x + 5) 
end 

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

1

Вы пытаетесь изменить значение «x» как переданное в this_method? Если нет, тогда «x =» будет потрачено впустую, особенно потому, что вы не используете x, если только вы не возвращаете x из метода. Если вы у вас есть два варианта:

def this_method(x) 
    x = x + 5 
    x = some_method_like_multiply_by_two(x) 
    return x 
end 

или просто:

def this_method(x) 
    x = x + 5 
    x = some_method_like_multiply_by_two(x) 
    x 
end 
+0

Привет, portforwradpodcast, Да, я пытаюсь изменить значение x. Защиту this_method (х) х = х + 5 some_method_like_multiply_by_two (х) конец Почему мне нужно присвоить его х и вернуть его первым, хотя? Я думал, что метод ruby ​​всегда возвращает значение, и он вернет последнее утверждение? – user3113735

+0

Да, ruby ​​всегда возвращает значение последнего оператора. В этом случае вы, вероятно, можете захотеть 'return some_method_like_multiply_by_two (x)' быть явным для других разработчиков – portforwardpodcast

+0

Isee, а оператор return не нужен, так как метод ruby ​​всегда возвращает значение и возвращает последнее утверждение. т. е. если его в последнем утверждении и его вызов другим методом, мы можем предположить, что этот метод вернет то, что затем возвращается. Говоря о рубине минималистской и неявной магии .. – user3113735

Смежные вопросы