0

Зачем нужна перегрузка?

Разве это не создаёт проблемы при работе с кодом? В чем смысл? Всегда можно расширить диапазон аргумента и сделать анализ внутри функции

25th Mar 2019, 12:13 PM
Андрей Холматов
Андрей Холматов - avatar
9 ответов
+ 1
It’s really useful. It’s a way of saying I have this method call that I know will execute in a particular way. Say I have a function to get an item that takes a String item id, a boolean parameter that tells me to call off somewhere else to print a receipt and a boolean parameter to update a database to log this retrieval. getItem(String id, boolean print, boolean log) For most cases, all these parameters may vary. I may have a class somewhere where it is all about a customer. I may have it such that getting an item always prints a receipt and logs this action for customers. Being in a customer class, I may invoke this method multiple times. I can reduce error and not getting one of the parameters wrong by overloading and declaring a getItem method such as getItem(String id) which calls getItem( id, true, true); I’m reducing the scope of error: If I didn’t overload, the many times I invoked getItem in the customer class need to be checked that I got the parameters correct vs checking the one overloaded method created for a customer scenario where I would have set the parameters once. I think with the right scenario, you will see how overloading is useful.
6th Apr 2019, 4:23 PM
Jenine
+ 1
Это действительно полезно. Это способ сказать, что у меня есть вызов этого метода, который, я знаю, будет выполняться определенным образом. Скажем, у меня есть функция для получения элемента, который принимает идентификатор элемента String, логический параметр, который говорит мне, что нужно вызывать где-то еще, чтобы напечатать квитанцию, и логический параметр, чтобы обновить базу данных для регистрации этого поиска. getItem(String id, boolean print, boolean log) В большинстве случаев все эти параметры могут отличаться. У меня может быть класс где-нибудь, где все о клиенте. У меня может быть такое, что получение товара всегда печатает чек и регистрирует это действие для клиентов. Находясь в классе клиента, я могу вызывать этот метод несколько раз. Я могу уменьшить ошибку и не получить один из параметров неправильно, перегрузив и объявив метод getItem, такой как getItem(String id) это звонки getItem( id, true, true); Я сокращаю объем ошибок: если я не перегружал, то много раз, когда я вызывал getItem в классе customer, нужно проверить, правильно ли я получил параметры, по сравнению с проверкой одного перегруженного метода, созданного для сценария заказчика, где я бы установить параметры один раз. Я думаю, что при правильном сценарии вы увидите, насколько полезна перегрузка.
6th Apr 2019, 4:24 PM
Jenine
+ 1
You’re right, the function is still written several times. In my simple example, I tried to illustrate I may have a customer class that calls the method in 50 different places. Imagine debugging: there could be 50 different places that I have called the method incorrectly for a customer getItem() call. With overloading, that error check is reduced to checking the 1 place where I have defined the overloaded method for a customer getItem() call versus the 50 places I used it with the same parameter arrangement. You are also right, you can name the method differently and avoid overloading. Using the same name (overloading) may help another programmer to know there is a different way the getItem method is called That is what I meant by my last point, I think you need to work on an example to see how it can be useful to appreciate it. I work on a codebase with a number of other programmers and we overload methods so we can see there are different ways of calling them without having to do the same call with the same arrangement of parameters in multiple places and increasing the places to check for errors. I’m sorry if you still don’t understand, that’s the best I’ve got I’m afraid.
6th Apr 2019, 5:12 PM
Jenine
+ 1
Вы правы, функция по-прежнему написана несколько раз. В моем простом примере я попытался проиллюстрировать, что у меня может быть класс клиента, который вызывает метод в 50 разных местах. Представьте себе отладку: может быть 50 разных мест, где я неправильно вызвал метод для вызова getItem () клиента. С перегрузкой эта проверка ошибок сводится к проверке 1 места, где я определил перегруженный метод для вызова getItem () клиента, по сравнению с 50 местами, где я использовал его с тем же расположением параметров. Вы также правы, вы можете назвать метод по-другому и избежать перегрузки. Использование того же имени (перегрузка) может помочь другому программисту узнать, что метод getItem вызывается по-другому Это то, что я имел в виду в своем последнем замечании. Думаю, вам нужно поработать над примером, чтобы понять, насколько полезно это оценить. Я работаю над базой кода с рядом других программистов, и мы перегружаем методы, чтобы мы могли видеть, что есть разные способы их вызова без необходимости делать один и тот же вызов с одинаковым расположением параметров в нескольких местах и ​​увеличивать количество мест, где можно проверять ошибки , Извините, если вы все еще не понимаете, это лучшее, что у меня есть, я боюсь.
6th Apr 2019, 5:12 PM
Jenine
+ 1
You’re welcome, sorry I couldn’t convince you 😅 With many programming concepts I have only really learnt and appreciated them with practice. Пожалуйста, извините, я не смог вас убедить 😅 Со многими концепциями программирования я только действительно изучил и оценил их с практикой.
6th Apr 2019, 5:20 PM
Jenine
+ 1
Hmm, I am not sure about what is available on the internet but I would recommend looking at open source projects (where you can contribute and see other programmer’s styles) or maybe try building an application (mobile or desktop) about something that interests you! Overloading methods may be a thing you appreciate in a large codebase? I really like YouTube tutorials when learning something techie besides the tutorials here. Don’t concern yourself about being a ‘real programmer’: as long as you enjoy coding and are actively coding; have enthusiasm; and keep asking questions/learning more - you’ll be doing great. As someone who has been a software engineer for a few years, I am still continuously learning and know there are many ways I can improve. All the best! Хм, я не уверен в том, что доступно в Интернете, но я бы порекомендовал посмотреть на проекты с открытым исходным кодом (где вы можете внести свой вклад и увидеть стили других программистов) или, возможно, попробовать создать приложение (мобильное или настольное) для чего-то, что вас интересует! Перегрузка методов может быть вещью, которую вы цените в большой кодовой базе? мне действительно нравится YouTube учебные пособия при изучении чего-то технаря помимо учебников здесь. Не беспокойтесь о том, чтобы быть «настоящим программистом»: если вы любите программировать и активно программируете; иметь энтузиазм; и продолжайте задавать вопросы / узнавать больше - у вас все получится. Как человек, который был инженером-программистом в течение нескольких лет, я все еще постоянно учусь и знаю, что есть много способов, которые я могу улучшить. Всего наилучшего!
6th Apr 2019, 5:37 PM
Jenine
0
Я все равно не понимаю в чем смысл? Функцию все равно писать несколько раз. Это замена-обработчик исключения при ошибочно аргументе? Чем это лучше отдельных GetItemStr+GetItemBool+GetItemNum?
6th Apr 2019, 4:54 PM
Андрей Холматов
Андрей Холматов - avatar
0
Благодарю за помощь. Действительно надо практически писать код, чтобы лучше понять
6th Apr 2019, 5:15 PM
Андрей Холматов
Андрей Холматов - avatar
0
Вы можете посоветовать ресурс в интернете, где можно попробовать выполнить задания, которые похожи на реальные задачи программистов?
6th Apr 2019, 5:25 PM
Андрей Холматов
Андрей Холматов - avatar