Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =) ✅Доступ к исходному коду и спонсорство www.patreon.com/SimpleCode ✅ donatepay.ru/don/SimpleCode ✅BTC кошелек: 12oYfJnvt76wjJbpvfhM41m6KPz6uz4LD4
Не могу не отметить искреннее желание лектора именно научить аудиторию, разжевать и донести информацию с разных сторон, а не просто заработать просмотры. Благодарю от всей души!
Сергей, спасибо вам безмерное за ту работу, что вы проделали! Дойдя до 39 урока у меня всё ещё не появилось ощущения, что есть в программировании что-то, что невозможно объяснить нормальным человеческим языком. В сравнении с книгой Шилдта, которую вы рекомендовали, ваши объяснения понятны и доступны. Ещё раз убеждаюсь, что если человек не может другого чему-то научить, то дело как правило не в обучающемся, а в учителе. Надеюсь вы вернетесь после всей происходящей с нашими странами беды.
Сергей, спасибо за вашу работу! Мне 18 лет, до этого момента я не знал что же я буду делать в своей жизни, но, наткнувшись на ваши уроки, я понял, что мне нравится программировать, спасибо за ваши труды, очень жду вашего возвращения! Надеюсь весь тот кошмар, который сейчас происходит в ближайшем времени прекратится, мира вам и вашим родным, друзья.
Спасибо за такое объяснение с использованием графики, до меня так лучше доходит. Когда речь идет о "сборщике мусора", мне это напоминает какой-то фантастический фильм, где кто-то или что-то прилетает и забирает кого-то, я уже не говорю о "куче", это мне напоминает один персонаж из мультфильма, который назывался "куча мусора". Я так посмотрю, что в руках неумелого программиста, программа в C# может превратиться в помойку, благо есть "сборщик мусора", наверное новичкам лучше начинать изучение с C#, а потом только C++, чтобы не создавать кучи мусора, которые некому собирать =)
Спасибо за урок. Было бы хорошо если бы прям в этом ролике рассказали про Nullable и что на самом деле можно присвоить int? = null; Интересно как в этом случае будет выглядит ваша схема. Жду новый урок как можно скорее!)
это все хорошо, но использование такого слова как null, например, в возвращаемом результате, не позволяет программисту доверять своему коду. На вызывающей стороне приходится строить конструкции проверки на null, потому напрямую такое слово как null не должно фигурировать в коде. null это условность для компилятора, которая нужна для того что бы охарактеризовать пустую ссылку. отсюда а) никогда не присваивать null б)инициализировать данные сразу после декларации ссылки на них.
Спасибо вам огромное за уроки. Вы смотивировали меня выбрать C# в качестве основного языка для разработки. Благодаря вам я пошел в программисты и теперь многое понимаю. Спасибо вам большое!
Вот этот выпуск прям пушка! (а я думал пропустить еще, ну вроде как знаю тему...) Крутой подход, может конечно и есть книги где с таким подходом объясняют, но в видеоформате точно нет
X Плюсы реально какой-то извращенец придумал, элементарно если на объект нет ссылки это же ежу понятно что эти данные должны удаляться автоматом, но почему в c++ до сих пор это не реализовали, непонятно.
@@fdriver7495 Это все низкоуровневое программирование) Это все надо для того чтобы все процессы (большинство) были в руках разработчика, следовательно ему решать когда будет удаление мусора, а не как в шарпе(или джаве) сборщик может включиться в самый неподходящий момент, из-за чего прога зависнет на некоторое время, Почти все гиганты(сайты тоже) написаны на плюсах, т.к в их руках огромный контроль над памятью Да и написать пару(в прямом всмысле) строчек кода чтобы очистить оперативку от какого-нибудь динам. массива delete[] arr; arr = nullptr; это аналог null шарпа
@@medvedvshapke Согласен, пора хоронить, правда все игры станут говном неоптимизированным как майнкрафт, и поисковые системы станут работать КУДА медленнее, минус большая часть движков(даже юнити), которые написаны на плюсах Вывод: плюсы и даже просто си будут жить еще очень долго.
Cпасибо за ролик, объяснили , как обычно, всё подробно и понятно. Только вот не понятно зачем нам вообще использовать (null ) если он обрывает путь от ярлыка к самим данным?
Garbage collector обнаружит что на обьект не осталось ссылок и удалит его из кучи. А зачем , зависит от логики, значит данные уже не нужны для исполнения программы
Доброго времени суток, Сергей ! Сделайте пожалуйста обзор на библиотеку Bass.dll и расскажите как читать теги с помощью этой библиотеки. А так же и изображение(обложку трека). Спасибо)
Хочу от себя добавить. ВОЗМОЖНО, кто то не уловил, я вот только после того как прочекал усвоил для себя это. int[] a = new int[1]; int[] b; b = a; a[0] = 1; Console.WriteLine(b[0]); // Консоль выведет 1
7:20 - зато если бы это были "Си Плюсы" то мы бы могли уничтожить объект и освободить память (или произвести другие действия,например какие-нибудь дескрипторы и хендлы отдать операционке в момент уничтожения объекта) здесь и сейчас, а не когда будет нужно сборщику мусора. Вангую, что в "Си Решетке" для освобождения объектом таких вот ресурсов из пространства ядра (дескрипторы ресурсов) вызывается какой-то специальный метод deinit, а в Плюсах можно ничего не делать, ведь delete вызовет деструктор :)
А в С# самому можно очистить память не дожидаясь работы сборщика мусора? Имею ввиду как в С++. Т.е. должно было бы выглядеть примерно так: int [] Arr = new int [10]; Arr = null; delete [] Arr;//Именно так в С++ вручную мы очищаем память. А в ООП это делалось обычно в деструкторе.
7:09 Так вы же сами говорили, что все данные (переменные массива) хранятся в стеке, а ссылка - в куче. Немножко глупо выходят слова. Если кто-то понял - ответьте пж
Ссылка хранится в стеке, а данные на которые ссылается это ссылка хранятся в куче, если присвоить ссылочному типу данных null то она теряет адрес в памяти(саму связь между ссылку и данными в управляемой кучи) Слушайте уроки внимательнее, он всë правильно объяснил
Можно создать хоть 525 ссылок на одни и те же данные, но только в том случае, когда есть хотя бы одна ссылка, из которой можно копировать остальные. Но если ты удалишь последнюю ссылку, то как ты теперь найдёшь свои данные? Никак. Вот представь, что куча - это море, а твои данные - это кольцо, брошенное в море. К кольцу привязана нитка (одна или много). Пока нитка существует, ты можешь сколько угодно раз вытягивать это кольцо, дёргая за нитку. Но как только оборвалась последняя нитка, кольцо уйдёт на дно, и больше тебе его не достать.
У меня возник вопрос по теме предыдущего урока. Вот, например, у нас есть класс Human (нестатический). В нём, допустим, есть поля health типа byte, age типа ushort, name типа string. Далее мы создали объект на основе этого класса человека. Дали ему здоровье health = 100, возраст age = 920, имя name = "Доктор". Меня интересует поле health, к примеру. Оно типа byte. Тип byte - значимый тип. Значит, поле health данного типа должна храниться в стеке. Однако так как она является полем объекта, то она хранится в куче, не так ли? И ещё один момент. Я знаю, как располагаются в памяти массивы: в быстрой части памяти, стеке, - ссылка, в менее быстрой, куче, - сами данные (если ответ на выше стоящий вопрос "да"). Но вот класс... Он тоже ссылочный тип. Но как он в памяти устроен? Может быть в стеке хранится ссылка на объект этого класса (если он есть) , который находится в куче (то есть все его поля, в частности) ? Я правильно понял?
После создания экземпляра класса Human все его поля будут храниться в куче. И тут уже неважно, значимого они типа или нет. В момент вызова оператора new среда исполнения сразу выделяет в куче столько места, чтобы уместить туда поля health, age и name.
У меня вопрос. Если переменные значимых типов принимают значения по умолчанию, то почему мы не можем вывести это значение по умолчанию? Например: если просто объявить переменную типа int и вывести её, то возникнет ошибка. Почему? Ведь интовая переменная имеет значение по умолчанию ноль. Почему этот ноль не выводится?
Насколько я понял - при объявлении локальной переменной, в стеке ничего не происходит, переменная там появиться только после инициализации, поэтому: int a; Console.WriteLine(a); // Ошибка, в стеке ничего нет, обращаться не к чему int a = new int(); // присвоение значения по умолчанию Console.WriteLine(a); // 0
"Если переменные значимых типов принимают значения по умолчанию" - они НЕ принимают значения по умолчанию, если создаётся локальная переменная. А значения по умолчанию принимаются лишь при объявлении поля (то есть переменной объекта класса).
Во время отладки наводишь курсор на переменную, появляется окошко. В правой части этого окошка есть знак "закрепить" в виде кнопки канцелярской. Нажимаешь и можешь перетаскивать это окно куда тебе удобно.
Да, обращаться к методу можно много раз, но каждый раз оператор int[] a = new int[10] будет формировать всё новые и новые массивы, выделяя всё новую и новую память. Все локальные переменные, создаваемые внутри функции, УНИЧТОЖАЮТСЯ сразу же, как только происходит выход из функции.
Объявить кучу переменных и вообще не присвоить им никаких значений! От самой постановки веет такой безумной свободой! Никаких задач, начальников, концепций, дедлайнов))
Если ты про массивы то в С++ можно сделать так что бы был не мусор а тоже 0. А отличие между С++ и С# в том что в С++ у тебя больше свободы в действиях, но и контролировать приходиться тоже свой код например это что бы не было утечки памяти.
я так понимаю ссылки содержать null, а не реальное значение нуля как в инте, чтобы JVM понимала - не надо искать по нулевому значению ничего в оперативке, а то натворишь еще чего! (понял, только после этого видоса, хотя тему знал)