Называя функцию, которая вычисляет вещь - PullRequest
0 голосов
/ 15 января 2020

Рассмотрим модуль Python (но он имеет отношение к другому языку) с рядом функций, предназначенных для последовательного использования. А именно, функции семантически связаны в соответствии со следующей схемой:

def function_a_to_b(thing_a):
    """Compute the thing_b."""
    thing_b = thing_a**2
    return thing_b

def function_b_to_c(thing_b):
    """Compute the thing_c."""
    thing_c = thing_b**3
    return thing_c

В этом тривиальном примере имя кандидата для function_a_to_b может быть squaring, а thing_a может быть названо square, и аналогично мы могли бы использовать cubin и cube. Теперь, если thing_a является чем-то сложным, что не поддерживает глагол, скажем weighted_glonk. Как я могу назвать function_a_to_b, чтобы все было коротким, очевидным и чтобы избежать переменных cla sh или тонкостей, подверженных ошибкам? Я склоняюсь к compute_weighted_glonk для функции. Другой вариант - венгерское наименование, скажем array_weighted_glonk для вещи

Ответы [ 5 ]

1 голос
/ 27 января 2020

Мои пятьдесят центов: я бы поспорил против введения соглашений об именах, чтобы раскрыть вычислительную структуру (Роберт Мартин: «У нас достаточно кодировок, с которыми можно справиться, не добавляя больше к нашему бремени» [Чистый код, стр.23]). Если ваши функции должны вызываться в строгом порядке, вы должны инкапсулировать их в другую функцию, которая делает именно это; или создайте какую-нибудь защелку, если это оправдано.

1 голос
/ 26 января 2020

Мой совет - найти баланс между кратким и многословным в именовании - Дмитрий Павлутин

Не бойтесь использовать вспомогательное слово. На простом английском sh вы бы не боролись с «Растение росло ...», а просто go с «Растение показало рост ...».

Вернемся к вашему примеру, как куб / куб Вы можете написать glonk / receiveGlonk или glonk / Calculate Glonk.


Кроме того, сфокусируйтесь на удобочитаемости, а не на поддержании стандарта глаголов, который в конце дня прочитает другой программист. Ваше глагольное слово, это что, эффект? Продолжайте в том же духе.

Ваше действие должно описывать изменения, произошедшие в вашей системе

1 голос
/ 26 января 2020

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

1 голос
/ 25 января 2020

Это зависит от того, что вы хотите сделать с этим глонком, но вы в основном правы с compute_wighted_glonk. Если вы хотите вычислить его, назовите эту функцию compute_glonk(), если вы хотите получить его имя, функция, вероятно, будет get_name_of_glonk(). У многих людей будет много предложений, есть много способов назвать ваши функции. Был ли мой ответ достаточно?

0 голосов
/ 26 января 2020

Я не знаю python, поэтому я хотел бы ответить с точки зрения javascript. Я не могу понять, что вы подразумеваете под glonk и чем-то, что не поддерживает глагол в контексте программирования. thing_a может быть не более сложным, чем другой массив, объект или другая вызываемая функция - в этих случаях вы можете поставить проверки типа в function_a_to_b. Кроме того, Compute the thing_b можно заменить другой функцией, если она включает несколько операций. Я бы сделал следующее:

//I'm using $ for var names just for semantics.
//$var is a php usage but I want to emphasise 
//what things are variables.
function myComputer($thing){  
	if(typeof($thing) == ("object")) {
		//take total no of properties or whatever you want
		return Object.keys($thing).length;			
	}
	
	else if(typeof($thing) == ("number")) {

		return $thing;
	}
	else if(typeof($thing) == ("string")) {
		return $thing.length;
	}

	else {
		return 0;
	}
}

function mySquarer($a) { //sementic naming instead of function_a_to_b	
	var $b = Math.pow(myComputer($a),2); //In your original version whats the point of computing thing_b if you wanna reassign a different value afterwards? 
	return $b;
}
function myCuber($b) { //When you call myCuber you can do myCuber(mySquarer($anything));
	var $c = Math.pow(myComputer($b),3);
	return $c;
}

console.log(mySquarer(3));
console.log(myCuber(mySquarer(2)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...