Когда вы пишете функцию, вам нужно разделить свой ум на две разные личности. У вас есть разработчик, который пишет функцию, мы будем называть их FuncDev, а у вас есть разработчик, который будет вызывать эту функцию, мы будем называть их CallDev.
Когда FuncDev пишет функцию, им нужно подумать о том, для чего CallDev нужна функция и в каких ситуациях она будет вызывать ее. Какую информацию имеет CallDev, когда они вызывают функцию? Что они хотят, чтобы функция на самом деле делала или возвращала?
В случае calculateSum
у CallDev будет два числа, по которым они хотят найти сумму. И FuncDev нужно только два числа, чтобы правильно рассчитать сумму. Итак, все согласны: чтобы позвонить calculateSum
, вы должны предоставить два числа и вернуть номер (это сумма этих двух).
Вся эта информация может быть найдена в заголовке функции:
//- This function will return (or give back) an integer
//| - This function requires two integers to do its job
//v v
int calculateSum(int a, int b) {
Вам не нужно также включать параметр int sum
, потому что A. это не то, что CallDev будет иметь во время вызова функции. Весь смысл в том, что они звонят, чтобы получить сумму в первую очередь! И B. Это не то, что FuncDev нужно для расчета суммы. Таким образом, вы будете налагать дополнительное условие на любого, кто вызывает функцию, не получая ничего в реализации функции.
Кроме того, все, что происходит внутри фигурных скобок в самой функции logi c, CallDev никогда не понадобится знать о. Решение о том, решит ли FuncDev создать int sum
переменную для хранения суммы, прежде чем они ее вернут, и т. Д. c ... не должно иметь значения.
Обычно, когда я занимаюсь разработкой, я делаю вызовы функций, прежде чем я даже написать функции. Так что в вашем случае я могу пойти дальше и подумать: «Хм, мне действительно нужна сумма из двух чисел. У меня есть два числа заранее, было бы неплохо, если бы я просто позвонил calculateSum(num1, num2)
и получил нужное мне значение. «. Поэтому я просто напишу вызов функции и продолжу: 1 .
1. В действительности это выглядит как написание тестов, когда это применимо для функции, и , а затем ее написание. Но предпосылка та же. Я определяю поведение, входы и выходы функции перед тем, как ее написать.