Как понять для чего использовать различные инструменты в программировании?
Доброго времени суток! Постараюсь кратко описать суть вопроса. Изучаю C#, понимаю всё то, что изучаю и в принципе получается решать различные задачки. Однако я не понимаю как и в какой ситуации использовать тот или иной инструмент(не знаю как правильно назвать это).
Приведу несколько примеров: я понимаю что такое sctruct, но не понимаю для чего это нужно. Понимаю модификаторы доступа, но не понимаю зачем их так много и какой где использовать. Понимаю что такое static, но не понимаю в какой ситуации применять. И вот как мне понять что, где, для чего и почему использовать. Не понимаю где использовать ref, out и in.
Понимание этого придёт с опытом при создании своих проектов или нужно именно что проанализировать что из себя представляет тот или иной инструмент и прийти к тому в какой ситуации я бы его использовал? Может покопаться в коде опенсорс-проектов каких-нибудь? Просто эта проблема действительно мешает. Начинаю переживать, что мой мозг сочтёт многую информацию, в том числе важную, ненужной ввиду не созданной связи аля "инструмент-применение" и просто выкинет её из головы..
Не знаю, этот вопрос, наверное, нужен для того, чтобы успокоить самого себя увидев какой-нибудь логичный ответ, к которому я бы и сам мог прийти или ещё что-то. В любом случае буду премного благодарен за ответ!
Василий Банников, возможно. Тем не менее в каких-либо задачках могу это применить. Но не понимаю для чего я бы это применял в своем проекте каком-нибудь, например.
Понимать != уметь использовать знание как нужно все таки.
Ewoni, если со структурами ещё могу согласиться, что мало где их можно применить, но вот, что вы не можете найти применение для public/private и static - я не верю.
Как минимум public/private можно применить там, где это явно рекомендуется соглашениями.
static - у тебя нет разве функций или классов, которые можно было бы сделать статичными?
Василий Банников, ты прав, да, с private и public действительно все просто, стоило и правда уточнить, что я про остальные(искренне пока что не понимаю где бы я мог их использовать, тут видимо реально с опытом пойму).
Статика же.. Честно говоря нет, в голову не приходит ничего, что я мог бы статичным сделать:(
Ewoni, статика, да... возможно не сразу все прелести:
- фабрики (не редко очень полезно..
- и расширения (от них вообще кайфую... синтаксис языка как пластилин, после осознания.. ;)))
.. может и еще что то )))
.. пока не попробуешь - не поймешь ;)))
Ewoni, так все в этой жизни с опытом ;))... даже начиная ходить, мы часто спотыкаемся ;)))...
- и пробовать
- и читать
- прочитал что то сложнее опыта, ищи примеры по проще
- освоил, повторяй попытки освоить сложнее ;))
.. ну как иначе то? )))
Ewoni, главный класс косольника/десктопа/службы чаще скорее не стоит делать статиком..
мои любимые расширения, достаточно разместить в паблик статик классе (библиотеке).. может не одной.. может не все паблик ;))..
.. все придет с опытом )))
#, спасибо за подобное напутствие! Очень мотивирует подобное, а ещё и успокаивает. Страшно ведь, что это может я какой-то не такой и все напрасно. Даже если знаю, что это не так - страх есть! Главное все таки и правда практиковаться и расти дальше. Вечное движение - прогресс!
может тебе и это понравится? ;))) https://habr.com/ru/articles/493484/
.. заметь.. уже практически 4 года назад, и при чем это перевод )))
.. я тогда... эээ... кхм... был в большом восторге, и пробовать применять, то так, то этак.. хочешь программровать? делай это постоянно .. ;)
сам страх и есть самая большая ловушка..
ну смотри:
- не боги горшки обжигали (с) ;)))
- по жизни, у меня было не менее 2х приятелей, которые просто на энтузиазме, хватали совсем небольшие уроки кодинга.. а потом сделали карьеры без дипломов )))
Василий Банников, ага.. То есть, к примеру, у работника компании можно будет название компании, в которой он работает, сделать статичным? Не беря рассчет, что он может сменить ее, конечно же.
Ewoni, о нее... отдельно взятые поля не статик ни когда. хотя не статический класс, может иметь статические методы. в первую очередь это фабрики динамических экземпляров.. но возможны и другие применения
Ewoni, и не смогут, и нет смысла )))...
... хотя?... может и могут.. но это к теме ограничений - если умудриться таковые создать - это один экземпляр на все время исполнения программы... даже если есть возможность менять значение (в чем сомневаюсь).. это то что выше говорил - важно понимать ограничения статиков )))
Ewoni, другой вопрос - не всегда, и не у всех из нас будет время и возможность, вести за руку именно тебя.. свои крепкие ноги (ну для кодинга мозги в смысле, и в топку страхи ;)))... как то так ))
Страшно ведь, что это может я какой-то не такой и все напрасно
.. нет "не таких" ))
.. поймать свою волну кайфа:
- кому то больше от процесса (увлекаясь задачей, у меня тайфуны в голове )))
- кому то от достижений.. пусть даже масенькими ступеньками.. особенно по началу ;)
.. я сегодня опять слегка разошелся.. но сам знаю далеко не все, даже из того что хочу, и не все успеваю (хоть и хозяин своего времени уже единоличный).. а мне в этом году будет 59 лет ))...
.. в начале 80х, в метро, по дороге к вузу - фантазировал свой компьютер... позднее нечто подобное реализовалось на уровне ZX Spectrum )))... но я уже успел вкусить машинки по крупнее ))
Не существует правильного варианта использования какого-либо инструмента - он просто имеет определенный функционал, а как его использовать - это уже на твоей совести и воображении.
Например, ref и struct можно объединить для реализации посетителя, который модифицирует посещаемого объекта и т.к. структура на стеке хранится (неправильно так говорить, но тут сойдет), то можно объект сделать struct а после передавать через ref - боксинга не будет. Так, например, реализован JSON десериализатор в System.Text.Json - нигде не пишут что так можно делать, просто нашли способ.
Или можно сделать 2 конструктора - один private без аргументов, а другой public с аргументами и тогда можно использовать EF Core, чтобы этот класс использовать и как объект в БД и как объект бизнес-логики. EF Core сам объект создаст и нужные поля выставит.
Таких вариантов - куча. Как найти их - опыт. Уже сам описал как его получить - пиши свои проекты, изучай проекты других, читай умные книжки/статьи.