Покодим? Обсуждаю Ваш код

  Рет қаралды 18,183

Daria Emacs

Daria Emacs

Күн бұрын

Пікірлер: 125
@Shantykoff
@Shantykoff 7 жыл бұрын
Вот такие видео я был бы рад смотреть каждый день, пойду чинить свой код и пришлю тебе, будешь на себе волосы рвать от увиденного :D
@sarlevdiz
@sarlevdiz 7 жыл бұрын
Больше таких видео!!!!! Очень круто
@АртёмЮгай-ц2п
@АртёмЮгай-ц2п 3 жыл бұрын
Этикет спасибо спасибо больше
@igorbond2823
@igorbond2823 6 жыл бұрын
А как можно кашу наваять в 2017 году? или редакторы C++ до сих пор не умеют код форматировать?
@АлександрНиконов-и4ы
@АлександрНиконов-и4ы 2 жыл бұрын
Это прям очень спорно. Если ф-ция должна изменять вектор - передайте указатель, если нет - по значению с const для наглядности.
@moskalenko2k24
@moskalenko2k24 7 жыл бұрын
Прикольные видео и вставки из советских фильмов хорошие) Очень хотелось бы хорошего видео по мув семантике))
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Спасибо, Андрей). Я подумаю о таком видео).
@roysigayerd9268
@roysigayerd9268 7 жыл бұрын
Дария Емакс , спасибо хороший контент ..Ты великолепна. Очень полезно все ..Но можно замечание ..Ты сама по себе самодостаточна, а твой контент несет интелектулаьный посыл..Но только пытаешься сосредоточиться, вставляются эти вставки из фильмов.. Сделай их раз, в 10 меньше ..Очень их много ..Напрягает..Имхо
@damianw.voronov1368
@damianw.voronov1368 7 жыл бұрын
Да Дарья... мне youtube всё подсовывал, подсовывал ваше видео, а я всё игнорил, игнорил...каков глупец!!! ;( Вы прелесть, и объяснения и подача, и позитивный настрой. Мало конечно чего понятно, ибо "начал с конца" просмотр ваших видео, и сам новичок. Но! Лиха беда начало! :)
@gitarnoob
@gitarnoob 7 жыл бұрын
А вы почитайте Стандарты программирования на C++ 101 правило и рекомендация Александреску, Саттер. Там всё на более высоком уровне рассказано, - с точки зрения Объектно Ориентированного Программирования вообще, откуда также следуют правила хорошего тона на C++ (const'ы, ссылки, семантика и модификаторы "встроенных" методов и т.п.) Книга философская, сложная в осмыслении, но много советов - кэповские. В книге нет C++11, правда есть СТЛные аналоги. Для тех кто не знает, std::move преобразует к rvalue-ссылке, т.е. && (два аперсанда), т.е. по-просту заставляет вызваться семантику перемещения у candies, потому что в конструктор candies передаётся rvalue-ссылка. Семантика перемещения это конструктор перемещения и оператор копирования перемещения, внутри которых следует писать обмен указателями. Входной аргумент в отличие от копирующей семантики уже не может быть const.
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Читала, но давно, по-моему, все советы из нее повторяются в книгах С. Мейерса. Кстати, есть много хороших книг о стиле и о том, почему так, а не иначе: Б. Керниган, Р. Пайк "Практика программирования", Б. Страуструп "Дизайн и эволюция С++".
@gitarnoob
@gitarnoob 7 жыл бұрын
Это я для зрителей вредный совет дал, так как для новичков книга тяжелая. У Майерса "Эффективное использование C++" советы простые, в отличие от вышеописанной книги.
@thomasmorgan9043
@thomasmorgan9043 7 жыл бұрын
Круто! Всегда использовал указатели в своей практике. А что это за IDE?
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Спасибо). Это не IDE, это Emacs)
@АртурГалимов-в1б
@АртурГалимов-в1б 7 жыл бұрын
Есть видос как ее рефакторят?
@ПтицаМеланхоличная
@ПтицаМеланхоличная 4 жыл бұрын
Про конструктор копирования непонятно, пересматривал 5 раз(
@ZerpicoBlog
@ZerpicoBlog 7 жыл бұрын
Я не так давно начал изучать С++ по книге Р.Лафоре после C#. Ты говорила что необходимо делать конструктор копирования на 6:31 А разве обязательно его описывать? Можно вызвать копирующий конструктор по умолчанию (по крайне мере если верить книге). Так вот: Room room2(room1);
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Нет, конечно, не обязательно его определять, пусть будет по умолчанию. Это нужно только, если у Вас в конструкторе выделяется память с помощью new или создаются какие-то ресурсы с доступом по указателю, тогда при копировании нужно это предусмотреть и выделить свою память и ресурсы для копии, а то скопируется только указатель.
@Acid31337
@Acid31337 7 жыл бұрын
За все время программирования на c++, я стал лучше писать код на c++, а вот программировать лучше не стал. У крестовиков это болезнь такая - они все время тратят на возню с языком и компилятором. Советую новичкам не изучать C++ вообще, если уже писали на си.
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Если такая ситуация у Вас, почему вы думаете, что это происходит со всеми))?
@gitarnoob
@gitarnoob 7 жыл бұрын
верно, для того чтобы серьезные задачи делать, используя при этом C++, надо много опыта иметь, свои "фишки" применять, досконально знать подводные камни и грабли.
@АндрейСавин-ч9т
@АндрейСавин-ч9т 6 жыл бұрын
я считаю что с++ очень функциональный язык и новичкам он подойдёт)
@yurim7756
@yurim7756 6 жыл бұрын
Daria Emacs Он же написал. Потому что время тратят на войну с компилятором и языком. Я бы еще уточнил. Потому что вам надо несколько лет потратить на изучение технической части, заучить все подводные камни, а это куча толстых книжек. Когда как на других языках, такая же куча толстых книжек уже будет не про компилятор, а про повышение мастерства. У людей на других языках есть заметная фора и если они учатся, то через лет 5-8 они могут стать прекрасными программистами, писать быстро хороший код со всех точек зрения. А с++ки за это время научатся только на грабли не наступать.
@avazart614
@avazart614 4 жыл бұрын
Так а чем Си отличается? Ровно та же болезнь то же компилятор и отладчик ...
@sashasashovic91
@sashasashovic91 4 жыл бұрын
GetSize(); что за стиль?
@DariaEmacs
@DariaEmacs 4 жыл бұрын
CamelCase
@oaknottree
@oaknottree 4 жыл бұрын
@@DariaEmacs так PascalCase же?
@mikhailgorshenin9076
@mikhailgorshenin9076 7 жыл бұрын
Дарья, здравствуйте. 7:01 - можно ли заставить компилятор оптимизировать код так, чтобы инициализация проводилась сразу необходимыми данными?
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Михаил, может быть, я не совсем правильно поняла Ваш вопрос, а как Вы ему подскажите, какие данные Вы считаете необходимыми?
@mikhailgorshenin9076
@mikhailgorshenin9076 7 жыл бұрын
Необходимые = в данном примере это ссылка на объект Room. Я понимаю, что правильнее будет использовать конструктор копирования при инициализации объекта, но все-таки хочется понять, может ли компилятор оптимизировать присвоение в теле конструктора в инициализацию с помощью конструктора копирования (или во что-то другое, что будет еще более правильно.)
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Компилятор может оптимизировать временные переменные, не до фанатизма, конечно, перемножить числа, убрать недостижимые куски кода, вот тут можно подробнее почитать об различных оптимизациях: habrahabr.ru/post/124131/ Совсем недавно компиляторы не были такими умными, как сейчас и, возможно, в будущем, компилятор сможет оптимизировать почти все).
@kjes8639
@kjes8639 7 жыл бұрын
Подскажите, пожалуйста, какой IDE вы использовали, который показывал вам что происходит в компиляторе? Очень полезно каждому джуну будет, это позволит лучше понять как работает код, который он пишет)
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Константин, это emacs). А компилятор показывает, что внутри происходит, потому что я вставила печать в функции. Есть такой макрос __PRETTY_FUNCTION__ с помощью него можно распечатать имя функции, в которой он находится: class Chocolate{ public: Chocolate(){ std::cout
@DariaEmacs
@DariaEmacs 7 жыл бұрын
редактор съел по одному подчеркиванию в названии макроса с каждой стороны :)
@kjes8639
@kjes8639 7 жыл бұрын
Спасибо)
@yurim7756
@yurim7756 6 жыл бұрын
Мало работал на С++, да и учил его еще в 90-х. Но удивляет удивление про то, как написан код. Насколько помню, везде с самого начала в книгах так и учат код писать, разделять приватную часть, публичную, разбивать на файлы с объявлением и реализацией и т.д. Я на самом деле позже узнал, что можно так и не делать. Про толстых собак - вы, женщины, инопланетянки. Мужчине никогда такая аналогия в голову не придет. Было еще в моей жизни. Девушка попросила объяснить, что такое рекурсия. Я ей показал на примере. Она: - Это как чужой! Из головы вылазит другая, из нее третья.
@clanwarexperiment2397
@clanwarexperiment2397 5 жыл бұрын
Добрый день. Хотелось бы узнать о том, могут ли члены класса быть public (понятное дело что могут, вопрос в том является ли это хорошим стилем программирования) или обязательно нужно создавать функцию-член, а сам член делать private. Допустим, что есть переменная radius и нам нужно это значение вне класса, можно ли оставить radius public или обязательно нужно создать функцию-член readRadius, а сам radius сделать private?
@DariaEmacs
@DariaEmacs 5 жыл бұрын
Добрый день. Вообще, да, положено делать члены класса приватными, а доступ давать через функции. Если Вы пишите библиотеку для своих коллег или других людей, то это особенно важно! Ваши пользователи могут разрушить весь объект, если им дать доступ ко внутренним переменным.
@Tmality
@Tmality 7 жыл бұрын
список инициализации имеет смысл, только если в нем, вызывается самописный класс. В данном примере coordX и coordY имеют тип double, который относится POD данным, в которых нет конструктора. Соответсвенно не имеет смысла писать их в списке инициализации.
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Со встроенными типами, это дело вкуса/привычки и удобства. У нас в фирме было принято использовать список инициализации. В другой компании могут быть другие coding standard для встроенных типов.
@bumbarabun
@bumbarabun 4 жыл бұрын
"Соответсвенно не имеет смысла писать их в списке инициализации." это не так. Смысл есть всегда - список инициализации будет всегда работать не хуже, а иногда лучше. Поэтому лучше иметь навык всегда использовать список инициализации, а не задумываться, а тут у меня свой класс или double? А вдруг кто-то завтра перейдет с double на свой?
@ms_shifu7047
@ms_shifu7047 7 жыл бұрын
А почему вы не используете using namespace std; что бы не писать постоянно std::...?
@DariaEmacs
@DariaEmacs 7 жыл бұрын
using обычно запрещают использовать в проектах (иногда дают послабление на полную формулировку, к примеру, using std::cout), поэтому я привыкла всегда писать полностью и не хочу расслабляться в своих мелких программках).
@АлександрАлександр-и6с
@АлександрАлександр-и6с 6 жыл бұрын
А какое IDE вы тут использовали?
@DariaEmacs
@DariaEmacs 6 жыл бұрын
emacs
@geraltt1455
@geraltt1455 4 жыл бұрын
классно
@ВладиславГришин-ш7ш
@ВладиславГришин-ш7ш 5 жыл бұрын
объявления сверху, реализации снизу. зачем два файла делать?
@ВладиславГришин-ш7ш
@ВладиславГришин-ш7ш 5 жыл бұрын
скиньте ссылку на кодинг стандарт
@MykhailoYasko
@MykhailoYasko 4 жыл бұрын
Тема венгерской записи не раскрыта.
@Hemyl0500
@Hemyl0500 7 жыл бұрын
У меня возник вопрос: в Room& operator=(const Room& r); на 7:01 почему нет никакого присвоения? Грубо говоря метод получил аргумент и ничего с ним не делает, затем делает вывод и возвращает ссылку на сам объект, которому мы так и ничего не присвоили. Или я где-то в чем-то не прав?
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Да, Вы правы, но в этом классе нет переменных, он нужен был только для того, чтобы показать, какие функции вызываются. А так да, нужно сначала проверить на самоприсваивание, а потом присвоить всем внутренним переменным новое значение: Room& operator=(const Room& r){ if (this == &r) { return *this; } cost = r.cost; // и здесь прописываем все переменные, которые надо изменить return *this; }
@Hemyl0500
@Hemyl0500 7 жыл бұрын
Спасибо за ответ (:
@sarlevdiz
@sarlevdiz 7 жыл бұрын
О, правда круто. А можешь выложить свой код на github?
@DariaEmacs
@DariaEmacs 7 жыл бұрын
)) мой кот не полезет на гитхаб).
@sarlevdiz
@sarlevdiz 7 жыл бұрын
А дай ссылку просто на свой репозиторий
@DariaEmacs
@DariaEmacs 7 жыл бұрын
у меня там нет ничего) : github.com/dariaemacs
@sarlevdiz
@sarlevdiz 7 жыл бұрын
спасибо огромное!
@sarlevdiz
@sarlevdiz 7 жыл бұрын
ай, он совсем пустой. А можешь порекомендовать примеры с хорошим стилем на github? Очень нужно
@hash8121
@hash8121 6 жыл бұрын
Сложнаа, я на Python работаю)
@антонващенко-й7я
@антонващенко-й7я 7 жыл бұрын
Третье видео смотрю ты жгешь!!
@ArtemMELNYK
@ArtemMELNYK 6 жыл бұрын
Очень полезное видео. Интересно было бы посмотреть на реальный документ "Кодинг стандарт". Еще интересный, но не рассмотренный вопрос о выравнивании кода (Indentation style) в контексте этого самого "Кодинг стандарта".
@dzanis79
@dzanis79 7 жыл бұрын
Какая красивая (подсветка синтаксиса) Ну setCoordX тоже не привычно ,везде встречается setPosX
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Да, мне тоже нравится). А имена разные бывают), по мне, главное, чтобы не foo(). :)
@ArtemMELNYK
@ArtemMELNYK 6 жыл бұрын
На мой взгляд, нужно было бы обозначить существующее соглашение о написании имен переменных, назвать существующие, как они назывется в литературе или википедии - Camel case и Snake case. Я как новичек, запомнил название "птички на жердочках" и чуть было не использовал его. ПС en.wikipedia.org/wiki/Snake_case en.wikipedia.org/wiki/Camel_case
@dat_21
@dat_21 7 жыл бұрын
Сомнительное применение move. Такие вещи нужно делать отдельным методом, или еще лучше - использовать свои перегрузки для rvalue ссылок. В таком случае программист, использующий этот класс, будет знать, что теряет передаваемый параметр.
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Человек пишет для себя SOM, при разработке интерфейса совсем другой подход).
@dat_21
@dat_21 7 жыл бұрын
В таком случае копирование с передачей по ссылке будет предпочтительней
@DariaEmacs
@DariaEmacs 7 жыл бұрын
А можно аргументировано? :)
@gitarnoob
@gitarnoob 7 жыл бұрын
"... Такие вещи нужно делать отдельным методом, или еще лучше - использовать свои перегрузки для rvalue ссылок. В таком случае программист, использующий этот класс, будет знать, что теряет передаваемый параметр." - 100% аргумент. Писать так низя, так как за пределами реализации класса Present неясно, можно ли в дальнейшем использовать аргумент переданный в конструктор Present или нет. Когда человек напишет такой (не совсем ровный код) а потом вернется к нему через месяц хотя бы - будет в недоумении.
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Еще раз, если этот код не для библиотеки, не для команды, не для подставьте_что_Вам_больше_нравится, а просто для себя и пользоваться кодом буду только я. Я думаю, что имею право использовать в своем проекте такой метод, потому что знаю, что _мне_ вектор больше не нужен. Я же не утверждала, что так нужно делать всегда, а просто показала, как еще можно его передать.
@bumbarabun
@bumbarabun 4 жыл бұрын
8:09 боюсь, Дарья, вы отстали от жизни. Передача вектора по значению может быть эффективнее передачи по ссылке.
@DariaEmacs
@DariaEmacs 4 жыл бұрын
А, Вы не смотрите старые видео).
@bumbarabun
@bumbarabun 4 жыл бұрын
@@DariaEmacs ютуб подсовывает, не виноватая я. Да и зрители должны знать, что это неправильно, откуда они знают что Вы за три года поменяли свое мнение? move semantics ввели же не после 2017.
@evgenykhabarov5427
@evgenykhabarov5427 7 жыл бұрын
Касательно оператора присвоения, компиляторы уже давно научились присваивать тип к типу, и не требуют данного оператора, конечно да это знак приличия, если конечно ты не чего не изменяешь при присваивание, ну к примеру одну переменную увеличит на 10, в таком случае человек который будет пользоваться библиотекой будет в недоумении почему при присваивание одна переменная увеличилась на 10 и тд.
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Да), но вообще говоря, компилятор все эти функции сам создает, если их не написал программист) и конструктор, и деструктор, и конструктор копирования, и оператор присваивания).
@dbushenko
@dbushenko 7 жыл бұрын
Ограничение 80 символов связано с тем, что раньше на старых текстовых терминалах можно было показать только 25 строк по 80 символов. Теперь это ограничение уже неактуально, особенно учитывая теперешние размеры мониторов :-)
@k.osiyuk
@k.osiyuk 7 жыл бұрын
А если я хочу напечатать код на бумаге?
@АртёмЮгай-ц2п
@АртёмЮгай-ц2п 3 жыл бұрын
Большое
@fastline4194
@fastline4194 6 жыл бұрын
огонь, побольше бы таких людей в проекте
@sarlevdiz
@sarlevdiz 7 жыл бұрын
А еще, лучше сейчас записать новые видео, пока не наступили прездники, а то потом жди новых выпусков
@ИльяБелоногов-х6э
@ИльяБелоногов-х6э 5 жыл бұрын
Названия переменных по типу птички на проводах - это дичь
@avazart614
@avazart614 4 жыл бұрын
С++Qt как раз курит кемел. Главное что бы не паскалькейс.
@AndriiKuftachov
@AndriiKuftachov 6 жыл бұрын
Ужас, как в Си++ все запущенно!!!
@satirik1051
@satirik1051 4 жыл бұрын
Блин, я не программист, но на девушку засмотрелся. Очаровательна.
@romankuksin9918
@romankuksin9918 7 жыл бұрын
Ваше "исправление" породило неожиданную move семантику. Юзер вашего класса не догадается, что ваш конструктор обнуляет вектор, пока не залезет руками в реализацию. Я не видел ни одного CC, в котором передача объекта во владение проводилась бы таким образом, и это логично, т.к. то, что вы показали - классический выстрел себе в ногу. Передавать вектор в конструктор нужно не по ссылке, а по значению, как было изначально. А std::move делать в двух местах: в списке инициализации и в теле вызывающей функции. Тогда тому, кто читает код будет очевидно, что вектор переиспользовать нельзя.
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Это не исправление, а попутное замечание. Этим классом никто пользоваться не будет. Это учебный проект для личного использования. Именно в этом месте вектор уже не нужен. Человек реализует som из предыдущего ролика.
@romankuksin9918
@romankuksin9918 7 жыл бұрын
Хорошо, пусть будет попутное замечание, содержащее плохой способ применения move семантики. То, что код не будет повторно использован, не отменяет его недостатков.
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Это не было обращением ко всем делать так, это было исследованием, что происходит внутри, сколько чего внутри вызывается, если менять виды передачи), не нервничайте так. А недостатки есть у всех, и никто не исключение.
@romankuksin9918
@romankuksin9918 7 жыл бұрын
Что значит недостатки есть у всех? Передачу вектора во владение класса можно и без недостатков написать. Или все-таки нельзя? Причем тут мои нервы? Зачем вообще переходить на личности?
@DariaEmacs
@DariaEmacs 7 жыл бұрын
Ну, вот, хотела Вас успокоить, а Вы еще больше разнервничались).
@buzzword123
@buzzword123 7 жыл бұрын
С# и java отстои, С++ рулз. Правильный выбор.
@shiny3937
@shiny3937 6 жыл бұрын
лучше рекламу скайпа снимай
@nasanbekov
@nasanbekov 6 жыл бұрын
лучше писать double coordX = 0; прям в классе
@alexmo6538
@alexmo6538 7 жыл бұрын
слишком перебиваются со смыслом видео вставки и это плохо смотрится
@buzzword123
@buzzword123 7 жыл бұрын
Alex Mo вставки необходимы для лучшего усваивания материала, без них ты бы уже на полавине забыл, что там было в начале
@alexmo6538
@alexmo6538 7 жыл бұрын
А вот и нет, последнее видео у Дарьи прекрасно сделано.
@РоманСафин-т9ю
@РоманСафин-т9ю 7 жыл бұрын
Посмотрел отрывками несколько ваших видео, появляется ощущение в вашей слабой квалификации. Вам и всем я хотел бы посоветовать углубится в архитектуру эвм и машинному программированию и прочитать с полным пониманием хотя бы одну нормальную книгу. Для эффективного использования языка СИ необходимо знать что у него происходит под капотом, как он транслируется в ассемблер.
Покодим? Смотрю Ваш код. Тетрис
19:34
Daria Emacs
Рет қаралды 16 М.
Собеседование | Junior C++
57:15
Daria Emacs
Рет қаралды 249 М.
Farmer narrowly escapes tiger attack
00:20
CTV News
Рет қаралды 10 МЛН
كم بصير عمركم عام ٢٠٢٥😍 #shorts #hasanandnour
00:27
hasan and nour shorts
Рет қаралды 10 МЛН
Players vs Pitch 🤯
00:26
LE FOOT EN VIDÉO
Рет қаралды 137 МЛН
Мама у нас строгая
00:20
VAVAN
Рет қаралды 11 МЛН
SFML C++ пишем игру платформер
19:00
FamTrinli
Рет қаралды 149 М.
Как ЧИТАТЬ Людей за ТРИ Шага  Татьяна Черниговская
8:45
Ментальная Мастерская
Рет қаралды 112 М.
Farmer narrowly escapes tiger attack
00:20
CTV News
Рет қаралды 10 МЛН