2016-06-15 3 views
0

У вас есть требуемые аргументы ключевых слов в javascript или python? Является ли это общей чертой языков программирования, или она новая и редкая? Они были бы аналогичны этой реализации ключевых аргументов в Ruby, в Рубине 2.1+Можете ли вы иметь аргументы ключевого слова в Javascript или Python?

def obvious_total(subtotal:, tax:, discount:) 
    subtotal + tax - discount 
end 

obvious_total(subtotal: 100, tax: 10, discount: 5) # => 105 

(приведенный выше пример взят непосредственно из https://robots.thoughtbot.com/ruby-2-keyword-arguments)

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

Это довольно распространенное явление, я думаю, найти плохо документированный код и задаться вопросом, какой аргумент что-то делает. Вот почему я всегда стараюсь делать хорошие и сжатые инструкции по моим методам. Я мог бы быть сумасшедшим, и это совершенно ненужная функция, в конце концов, я просто новичок-кодер, который пишет сценарии, когда становится ленивым.

+0

Для Python см.: Https://www.python.org/dev/peps/pep-3102/ – jonrsharpe

+0

Я бы сказал, что это случай быть подробным просто для того, чтобы быть подробным. Совсем не сложно определить параметры функции, и если разработчику необходимо изменить/проанализировать функцию, которую он должен искать в любом случае. EDIT: после прочтения обоснования Python, я могу видеть, насколько могут быть полезны параметры только для ключевого слова. Тем не менее, если вы * нуждаетесь * в параметре ключевого слова, вам может быть лучше рефакторинг, IMO. – user991710

+0

Ваше имя спрашивает * «можете ли вы» *, что в порядке, но ваш вопрос подразумевает, что вы хотите получить ответ на * «если вы» *, который слишком основан на мнениях для SO. – jonrsharpe

ответ

3

PEP-3102 представил "ключевые аргументы только", поэтому в Python 3.x вы могли бы сделать:

def obvious_total(*, subtotal, tax, discount): 
    """Calculate the total and force keyword arguments.""" 
    return subtotal + tax - discount 

При использовании:

>>> obvious_total(1, 2, 3) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: obvious_total() takes 0 positional arguments but 3 were given 
>>> obvious_total(subtotal=1, tax=2, discount=3) 
0 

В JavaScript (предварительно ES6), нет возможности иметь аргументы ключевых слов. Соглашение для этого было бы определить один аргумент позиционного, в которую пользователь передает объект буквальный:

obviousTotal = function (input) { 
    return input.subtotal + input.tax - input.discount 
} 

, а затем передать литерал объекта в качестве input. При использовании:

> obviousTotal(1, 2, 3) 
NaN // because (1).subtotal etc. are undefined 
> obviousTotal({ subtotal: 1, tax: 2, discount: 3 }) 
0 

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