LINUX.ORG.RU

Прошу покритиковать моё приложение

 ,


0

2

Это мой первый опыт использования C++ и Qt, так что кто может, покритикуйте.

Репозиторий

Эта программа — графическая запускалка для другой моей программы w2midi. Она распознает ноты в звуковом сигнале и преобразует его в MIDI.

w2midi_qt взаимодействует с w2midi с помощью CLI.

Заранее спасибо!

Ответ на: комментарий от realbarmaley

Тоже вариант!

вообще-то со времени основания плюсовых шаблонов эти навороты переименовывали в приличный текст. оно для того и сделано.

alysnix ★★★
()
Ответ на: комментарий от alysnix

Если ты сделаешь псевдоним слишком кратким, то точно ли ты сможешь понять по этому сокращению тип? Или ты будешь понимать скорее назначение? А чтобы вспомнить тип и далее будешь наводить указатель в IDE на переменную? А назначение и по имени переменной можно понять.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от realbarmaley

А зачем в Qt изобрели велосипеды STL? Зачем QList если есть std::list?

хозяин - барин. ты тоже можешь себе list изобрести. списки разные бывают.

alysnix ★★★
()
Ответ на: комментарий от rumgot

Если ты сделаешь псевдоним слишком кратким, то точно ли ты сможешь понять по этому сокращению тип?

неужели на свете есть то, чему нельзя подыскать краткое имя??? даже бесконечной вселенной имя нашли… есть мнение что то, чему нельзя дать имя, не существует в природе или непознаваемо в принципе.

alysnix ★★★
()
Ответ на: комментарий от alysnix

Ты не ответил на вопрос, а развел демагогию. В моем примере ты написал псевдоним MapOfShit. Ну вот, он тебе даст ответ на то, какой там полный тип?

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

Ну вот, он тебе даст ответ на то, какой там полный тип?

так ответ уже есть - ты взял map и напихал туда какого-то гна… получилось имя типа. что тут неясного? ты чего туда напихал-то?

alysnix ★★★
()
Ответ на: комментарий от realbarmaley

Как минимум в QList есть доступ по индексу за константное время.

rumgot ★★★★★
()
Ответ на: комментарий от alysnix

Ты не хочешь отвечать и поэтому пишешь демагогию?

MapOfShit m = someFunction();

Ты по этой записи можешь определить полный тип m, а не только то, что какой-то там map?

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

std::unordered_multimap<std::string, std::tuple<int, long, float, double>>).

у тебя тут мапится строка к каким-то безумным туплам… эти туплы имеют осмысленное название? что они из себя представляют? зачем там 4 значения таких типов объединены в тупл?

alysnix ★★★
()
Ответ на: комментарий от alysnix

Понятно. Пошел в демагогию. Как обычно не отвечаешь на неудобные вопросы. Сначала научись отвечать на вопрос собеседника, а потом свой задавай. Иначе - лесом.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от rumgot

Понятно. Пошел в демагогию

это ты демагог. ты утверждаешь что истинно верным именем типа является конструктивистское. то есть как он строится - такое у него и имя.

я же утверждаю, что имя типа отражает сущности предметной области.

Счет, Клиент, Поставщик, Заказ, Путь, и так далее…а не то как они устроены внутри. вот если будет - Набор_заказов_клиента…а не std::unordered_map<…..> - то это и будет отражать понятия предметной области.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 2)
Ответ на: комментарий от alysnix

Хахахаха. Вот оно что. Видишь, ты съезжаешь. Потому что ответ на мой вопрос - нет, не фига ты не поймешь.

А то что ты сейчас утверждаешь - это то, что имя типа должно отражать назначение этого типа. И тогда, следуя этому утверждению, что тебе говорит о назначении тип допустим QString? Что это? Клиент или поставщик? Поймешь? А я тебе отвечу за тебя (поскольку ты и тут как обычно уйдешь от ответа) - нет, не поймешь. А вот по чем можно в данном случае понять назначение - так это по имени переменной. О чем я тоже писал.

А твой вот этот убергениальный псевдоним MapOfShit в случае с внятным именем переменной будет выглядеть так:

MapOfShit mapOfShit = someFunction();

И чем это лучше чем:

auto mapOfShit = someFunction();

?

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от rumgot

И чем это лучше чем:

это лучше тем, что в первом случае есть явное утверждение о типе результата. и присваивание в данном случае проверяется по правилам совместимости типов.

и если someFunction() возвращает несовместимый тип - это ошибка.

во втором случае - никакой ошибки не будет… причем ошибки обнаруживаемой компилятором может не быть вовсе! если везде понатыканы auto. и код не будет работать как надо.

alysnix ★★★
()
Ответ на: комментарий от alysnix

А что, мы уже закончили обсуждать читабельность. И перескочили на ошибки. Ок. Давай про них.

Более предметно обсуждать конкретные кейсы. Но ты не любитель такого. Поэтому примеров с кодом естественно нет.

Вот ты хочешь инициализировать переменную тем, что вернет тебе функция. Открываешь объявление функции, сморишь тип и объявляешь переменную этого тип и инициализируешь тем, что вернула функция. В случае с auto ты все равно смотришь объявление (ну потому что ты же не рандомно функции дергаешь, а определенно, т.е. прочитал описание и т.п.), но не печатаешь явно тип. И в чем ты себя защитил? В том, что посмотрел объявление функции и пока собрался печать имя типа в своем коде успел его забыть и случайно ввел другой тип? Так не факт, что возвращаемое функцией значение не будет неявно преобразовано к тому типу, который ты указал. Короче говоря, твоя эта защита - это самовнушение скорее.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от rumgot

А что, мы уже закончили обсуждать читабельность. И перескочили на ошибки. Ок. Давай про них.

«читабельность» это удобство прежде всего ПОНИМАНИЯ программы. auto не способствует читабельности, поскольку скрывает явные смыслы(типы переменных), но способствует писабельности, поскольку можно явно тип не писать, сократив себе объем работы.

представим человека, что читает текст проги в первый раз. он тогда вообще не понимает, что за обьекты являются переменными, не может понять суть предметной области(типы есть понятия из предметной области), и ориентируется только на имена функции, которые не несут всей полноты информации. итак - читабельность в смысле постижения смысла кода - никакая, хотя текст читается легко… но представляет из себя непостижимую галиматью.

В случае с auto ты все равно смотришь объявление, но не печатаешь явно тип. И в чем ты себя защитил?

Сейчас и тип функции может выводиться, и функции могут иметь близкие списки параметров, одинаковое имя и разный тип результата.. и вообще имена функции в будущем могут поменять, и вместо одной функции будет вызвана другая, и тип auto будет другим. ну и так далее.

alysnix ★★★
()
Ответ на: комментарий от alysnix

«читабельность» это удобство прежде всего ПОНИМАНИЯ программы. auto не способствует читабельности, поскольку скрывает явные смыслы(типы переменных), но способствует писабельности, поскольку можно явно тип не писать, сократив себе объем работы.

А я говорю, auto способствует пониманию, т.к. сокращает длинные имена.

писабельность - оформляй патент, писабельный ты наш.

представим человека, что читает текст проги в первый раз. он тогда вообще не понимает, что за обьекты являются переменными, не может понять суть предметной области(типы есть понятия из предметной области), и ориентируется только на имена функции, которые не несут всей полноты информации. итак - читабельность в смысле постижения смысла кода - никакая, хотя текст читается легко… но представляет из себя непостижимую галиматью.

Ты слеповат? Я тебе задавал вопрос: что тебе говорит о назначении тип допустим QString? Что это? Клиент или поставщик? Поймешь?

Сейчас и тип функции может выводиться, и функции могут иметь близкие списки параметров, одинаковое имя и разный тип результата.. и вообще имена функции в будущем могут поменять, и вместо одной функции будет вызвана другая, и тип auto будет другим. ну и так далее.

А если имя типа поменяется, раз и раньше SomeType был для одного, а теперь SomeType совсем другой интерфейс имеет и что ты выиграешь в случае явного указания?

Если код пишет идиот, то явные типы его не спасут. А ты усиленно высасываешь проблемы из auto, но не желаешь делать этого с явными типами.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от rumgot

Я тебе задавал вопрос: что тебе говорит о назначении тип допустим QString?

тебе сложно постичь, что это строковый тип либы QT? и ты задаешь такие вот вопросы? ты б лучше спортлото спросил по этому поводу.

карочи. для бешеной собаки 7 верст не крюк. ищи выводимые типы переменных в обьявлениях функции, документациях, форумах, в коде функции вида auto ff(), и так далее.

я использую auto исключительно в местах, где тип ОЧЕВИДЕН в месте написания этого auto, ну или от лени при писании(что вредно).

alysnix ★★★
()
Ответ на: комментарий от alysnix

Я тебе задавал вопрос: что тебе говорит о назначении тип допустим QString? Что это? Клиент или поставщик? Поймешь?

тебе сложно постичь, что это строковый тип либы QT? и ты задаешь такие вот вопросы? ты б лучше спортлото спросил по этому поводу.

Ты даже мой вопрос сократил. Там были варианты назначения.

карочи. для бешеной собаки 7 верст не крюк. ищи выводимые типы переменных в обьявлениях функции, документациях, форумах, в коде функции вида auto ff(), и так далее.

Ага, ага. Иди н.

я использую auto исключительно в местах, где тип ОЧЕВИДЕН в месте написания этого auto, ну или от лени при писании(что вредно).

Ну естественно. А вот эти места очевидны только тебе разумеется.

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

Такой себе аргумент. Привести пример говнокода и показывать пальцем - вот, смотри, какой плохой код получается. Ну можно тогда привести в пример

auto obj = getSomething();

и сказать что вот мол как нечитабельно получается

cobold ★★★★★
()
Ответ на: комментарий от cobold

В тезисе о том, что auto сокращает запись - отличный аргумент. То что привел ты тоже вполне читаемо. Только имя переменной может быть более внятное. А в чем именно твой код нечитаем ты не обосновал.

Ну не нравится мой тип. Возьми результат того, что возвращает std::chrono::high_resolution_clock::now();. Шикарно это вводить явно. Чувствуешь +40 к навыку кодера от того, что указал такой тип явно?

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от rumgot

Да какая разница QString или auto?!! На вкус и цвет, по моему можно сочетать.

realbarmaley ★★
() автор топика
9 декабря 2022 г.

Тред чисто заповедник уникальных кровавых плюсопроблемушек, которые немыслимы в более нормальных языках)

slepoy_pew
()
Ответ на: комментарий от crutch_master

сделать так, чтобы он запускался и собирался через 5-10 лет могут единицы

Просто надо делать гуй на яве. Вот и всё. Написал один раз – пользуешься десятилетиями.

cocucka ★★★★☆
()
Ответ на: комментарий от slepoy_pew

У Фортрана нет доступа к железу напрямую и память контролировать нельзя

realbarmaley ★★
() автор топика
Ответ на: комментарий от realbarmaley

Если ты правда школьник то ты большой молодец, хорошее начало.

Комментарии должны соответствовать тому кто их будет читать, если читать будут учителя то оставь как есть. Приспичит после сдачи проекта можешь и перевести или дополнить английским, опять же если не собираешься бросать приложение иначе в английских комментах смысла нету.

-float W2MidiCli::getAccThreshold() {
-    return accThreshold;
-}
+float W2MidiCli::getAccThreshold() 
+{
+    return accThreshold;
+}
float W2MidiCli::getAmpThreshold()
{
    return ampThreshold;
}

По остальному не скажу, плюсы не знаю и знать не хочу :D

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU
  1. Отчистка лога при запуске
  2. Магические числа в enum нет смысла помещать, поскольку это настройка сетки QT.
realbarmaley ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.