|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, если есть интерес все таки выяснить врун я или нет - задайте вопросы, отвечу что делает каждая строчка. но, правду говоря, тратить время на какие то доказательства - это в моем положении роскошь. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:33 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
PetroNotC Sharp pesets пропущено... я поступил еще логичней - я не просил никого ничего никуда переносить. Двойка по логике. Вас вместе со стулом перенесли с рынка на галеры. Знаете такие? А вы продолжаете сидеть с умным видом дальше как будто ничего не произошло)))). никто не умрет )) ну поищу помощи в другом месте ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:35 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev По коду. То с помощью исключений, то с помощью малопонятного ErrCount касательно исключений - согласен полностью, но уперся в ситуацию, которую пока не смог победить. всплывало исключение от java.NIOException, а когда пытался перехватить конкретно данное исключение всплывало unreported exceprion от java.IOException и рекомендация системы перехватывать самый общий тип исключений, а не конкретное. Разорвать этот круг пока не получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:43 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
pesets задайте вопросы, отвечу Почему переменная называется Err Count ? название другой переменной Fool OperPath ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:43 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev pesets задайте вопросы, отвечу Почему переменная называется Err Count ? название другой переменной Fool OperPath ? потому что первоначально я хотел ErrCount помещать просто количество ошибок при проверке. Count - от Counter, to count - считать )) FoolOperPath - тут переменная - полный путь к каталогу OPER, в который я помещаю файлы с сгенерированными операциями POS (Point Of Sail) - т.е. точек продаж. ну а то, что вместо Fool нужно Full - тупанул ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:52 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Из критического (на мой взгляд) 1. Отсутсвие вынесенной процедуры/класса который собственно выполняет рабочее действие note: что есть "рабочее действие" нам не понятно, т.к. задания, что должен делать код и не приложили 2. Из-за этого спагетти код с System.out.println который безумно режит глаза. Всякий ввод-вывод, вопросы пользователей и все остальные мухи - отдельно, код который выполняет бизнес дествие - должен быть отдельно 3. Насколько много должно быть процедур, насколько мельчить - это вопрос вкуса и ТЗ (его мы не видели). всплывало исключение от java.NIOException, а когда пытался перехватить конкретно данное исключение всплывало unreported exceprion от java.IOException и рекомендация системы перехватывать самый общий тип исключений, а не конкретное. Разорвать этот круг пока не получилось. Ничего не понятно. Т.к. java.NIOException при работе с файлами возникать не должно. Это сетевое исключение. По крайне мере, насколько я знаю и по доке/смыслу. Что-то Вы не договариваете. pesets PetroNotC Sharp Leonid Kudryavtsev, >Интересная система счисления: 1, 12, 1234. ===))))))))) да это просто нереализованная задумка - сначала хотел извратиться, но потом решил не усложнять HabrПункт 9.... Не пишите спагетти код. Разложите все по классам, пакетам. Создайте где нужно интерфейсы, вынесите перечисления в ENUM , если необходимо. "обычные разработчики" ( TM ) обычно ошибки кодируют без затей 1,2,3,4.... и так далее (лучше Enum) Такую систему счисления 1,123,123456789 - вижу первый раз ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:02 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, да кидал я задачу - 9ый пост на первой странице - огромная блин фотка получилась аж неудобно, но исправить не могу ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:06 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Разорвать этот круг пока не получилось. разбейти на процедуры. В комментариях напишите: Что данная процедура делает Входные параметры Выходные параметры Какие ошибки и как процедура возврашает (раз мы про ООП, то лучше exceptions). (хотя вариант с возвратом кода ошибки так же никто не отменял и он вполне законнен IMHO, но если про ООП - то лучше exceptions) Почитайте как оформляются комментарии для JavaDoc. Можно даже JavaDoc сгенерить. Смысла нет, но поклонникам ООП может быть приятно. Скорее всего жить станет легче ))) т.к. где там может возникнуть "круг" - мне вообще не представить. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:11 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, try { // создаем папку для файлов операций OPER Files.createDirectory(Path.of(FoolOperPath)); } catch (IOException e) { e.printStackTrace(); } всплыло: java.nio.file.FileAlreadyExistsException: D:\MyProjects\task1\OPER at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:87) at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103) а когда перехватываю try { // создаем папку для файлов операций OPER Files.createDirectory(Path.of(FoolOperPath)); } catch (FileAlreadyExistsException e) { e.printStackTrace(); } получаю D:\MyProjects\task1\src\com\home\Main.java Error:(85, 42) java: unreported exception java.io.IOException; must be caught or declared to be thrown Information:java: /D:/MyProjects/task1/src/com/home/Main.java uses unchecked or unsafe operations. Information:java: Recompile with -Xlint:unchecked for details. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:30 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, +1 Код: java 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:56 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
С одной стороны - идиотское задание С другой стороны - желание сделать хорошую программу для пользователя в целом получилось - смесь ежа и колючей проволоки IMHO Разбить на процедуры (в обратном порядке) 1. Ф-ция генерирующая одну операцию, возврашает String Код: java 1.
форматтер требуется между запусками, т.ч. код лучше вынести в отдельный класс и глобальные (в рамках класса) переменные/константы, типа форматера, создавать один раз в конструкторе/методе инициализации 2. Процедура генерирующая один файл 3. Процедура генерирующая набор файлов по списку ArrayList<String> 4. соответственно - процедура преобразующая конец командой строки args в список ArrayList<String> ну и дальше, по необходимости ============== По коду: Код: java 1.
Как уже сказали: https://docs.oracle.com/javase/7/docs/api/java/io/File.html File classstatic String pathSeparator The system-dependent path-separator character, represented as a string for convenience. static char pathSeparatorChar The system-dependent path-separator character. static String separator The system-dependent default name-separator character, represented as a string for convenience. static char separatorChar The system-dependent default name-separator character. NOTE: Только сейчас заметил, что используется класс File s , вместо нормального File. Похоже, поэтому, и NIO ошибка вылезает. Меньше знаний - меньше печали (что такое Files и как с ним работать - вот лично я не знаю) Код: java 1. 2. 3. 4. 5.
Вас это просили? В задание про необходимость проверки ничего нет - в топку Нет кода - нет ошибок Ошибка и так будет, когда попытаемся открыть файл, которого нет. Нечего переусложнять тестовая (б#$%) задание проверками и ф-ционалом о котором не просили. IMHO Код: java 1. 2. 3.
Ну отрицательное - ну и пофиг. Тогда ничего и не создастся. Правила проверки параметров в задании были? не было? - в топку Код: java 1. 2. 3. 4. 5. 6.
В задании ничего про папку OPER не увидел. Про необходимость ее создавать, если ее нет - так же. Туда же. Т.е. - в топку Код: java 1.
if и простыня текста - за гранью добра и зла. название переменной: 1. с большой буквы 2. с Count за гранью добра и зла Код: java 1.
Try знаем... это хорошо Код: java 1. 2.
ошибки тупо игнорируем? даже не хочу думать, почему так но просто игнорировать ошибки - лучше бы ее вообще не обрабатывали Кроме того, дальше по коду будет try for resource. Почему здесь тогда просто try? Или Вы знаете / умеете try с ресурсами, тогда его всюду и впихиваете. Или не умеете или не любите - тогда нафиг он вообще где-то. Делаете одностильно. Пусть ужасно, но однообразно Файл в случае ошибки НЕ закрывается. (а вот это уже не предирка, а реальный косяк) Чтение PosArrayList - явно напрашивается на отдельную процедуру/ф-цию Нужна ли внутри нее обработка ошибок, вообще под вопросом. Ну не обработали ошибку, ну пролезет exception на уровень выше. Если использовать try с ресурсами, то все нормально (но у Вас тут не так) IMHO Если код можно не писать - лучше его не писать. Нет кода - нет ошибок программиста. IMHO чисто мое Код: java 1.
Нигде про кодировки в задании ничего не было. Почему windows-1251 ? Туда же - в топку Код: java 1. 2.
Или эту ситуацию мы считаем ошибкой - выдаем исключение и пошли все нафиг Или это не ошибка. Вроде стандартное поведение - просто перезатираем файл. Чем оно не устраивает? Отличное от стандартного поведение в задание указано? Туда же - в топку Код: java 1.
Бл№;%. Почему переменная Is Digit ? И с заглавной буквы. Код: java 1.
Вроде же try for resource мне кажется в этом случае .close() лишний поменять close на комментарий, что закрывать файл не нужно, т.к. try for resource Note: проверить по документации! Я не уверен Код: java 1. 2. 3.
Вывели простыню на экран.... и ПРОИГНОРИРОВАЛИ ошибку Замечательно Или ошибки НЕ обрабатываем и просто их отправляем автоматом на уровень выше. Или как-то нужно обрабатывать. Раз в задании ничего не сказано - можно ничего и не делать. При нормальном течении процесса - пытались закрыть файл. При ошибке - закрытия файла делать не стали. Опять раздвоение личности. Туда же - в топку Код: java 1. 2. 3.
Зачем flush? System.out в рабочем коде? Вы серьезно? Туда же - в топку проще самому написать, чем пытаться чужой код перелопачивать. половину делать не просили, не зачем было и делать. IMHO & AFAIK Обработка ошибок за гранью добра и зла. Лучше бы ее не было. Ну есть ошибка, ну выскочит стандарное сообщение в консоль. Обрабатывать ошибки в задании же не просили. В main можно вообще было без всякого errCode обойтись. Отругаться в консоль и return. IMHO много знаний - много печали не забывайте, что все "суета сует" Проще надо быть. Особенно с тестовыми заданиями. Которые расчитаны на уровень студента/школьника. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 19:21 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, спасибо, буду прорабатывать замечания. "Правила проверки параметров в задании были? не было? - в топку" теперь об излишествах. само собой это ИМХО. ничего личного )) как человек, который сам принимал на работу и программистов и админов, а еще как пользователь софта разного уровня могу по своему опыту резюмировать следующее - программер, который не проверяет пользовательский ввод и манкирует подобными мелочами - в результате добавляет себе и пользователям(клиентам) и снова себе отложенных во времени проблем по экспоненте. Подобный подход в итоге привел к тому, что в банковском софте за невменяемо дикие для меня деньги поиск ничего не ищет, потому что лишний пробел затесался в конец строки ввода. Кто то не сделал что то вроде alltrim () потому что это не было указано в техзадании? (тут у меня наливаются кровью глаза, а рука ищет парабеллум.) Инкрементный поиск %;$#@ по справочнику не делается, потому что в тех задании нет, КАРЛ!!. А у юзера кровища из глаз хлещет просматривать простыни выпадающих списков в поиске нужного элемента. (я щас инфаркт первый схвачу). Так вот лично я бы принял на работу среднего медленного, но ОТВЕТСТВЕННОГО за свой код программера, чем очередного гения, которому лениво подумать о тех, кто будет пользоваться его софтом. поэтому я и постарался продумать ошибки ввода параметров Но, должен признать, что времена изменились. Когда я писал софт с 1997 по 2005 у меня было достаточно времени на написание софта и проработку многих "лишних" нюансов. Мне ставили сроки которые декларировал я. А сейчас сроки обозначает бизнес. Когда тупо копируют западные методы менеджемента типа Agile и прочего прочего, у разработчика часто нет времени на написание годного софта. Всеобщая тенденция успеть выпустить гуано(продадим сначала потом, если что, доработаем) вперед конкурента привела к тому, что мы все покупаем гуано во всех сферах, которое не дорабатывается. еще раз спасибо за замечания ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 20:33 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, растащило меня )))) мой нач когда то давно давно давно сказала мне, что если пользователь один раз ввел какие то данные в систему, то если я что то напишу такое, что ему придется второй раз вводить одни и те же данные, то она лично меня повесит за сараем. и я считаю, что она права уже полтора десятка лет. и когда я вижу как жена в страховой компании (не мелкой) работает в двух системах вводя одни и те же данные и у них это называется миграцией мне просто хочется самому повеситься. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 20:42 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, просьба не счесть за наглость, можно еще вопрос ? по второй задаче не подскажете какой лучше компонент/коллекцию выбрать с точки зрения того, что бы запихнуть в него файл с операциями из первой задачи и с малой кровью сделать нужные группировки и подсчеты сумм в разрезе групп ? я могу это сделать парой строк на sql, но тут sql не предполагается ))). когда то были красивые дрова ODBC , которые позволяли писать sql запросы к плоским структурированным тхт файлам и это было здорово. Сейчас ничего такого не смог найти. а еще даже в самых ранних версиях фокспро была так называемая макроподстановка - переменной присваивались строки кода, которые потом выполнялись как код. Можно было связать переменную с полем в БД, писать в рантайме код в текстовых полях ДБ, менять его и выполнять без перекомпиляции приложения. увидел в Java лямбда выражения - это попытка сделать что то аналогичное ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 21:06 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Да не нужен здесь sql. Зачем так много static??? Это зачем? Класс вроде Main называется. Код: java 1. 2. 3.
Уже несколько раз порекомендовали вынести все действия по методам. В Код: java 1. 2. 3.
Чисто предположение, задание это то что прописано в комментариях(вывод в консоль)? Каждое действие в отдельный метод, так легче все это отладить/изменить/доработать/перехватить исключения и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 21:50 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
pesets Leonid Kudryavtsev, по второй задаче не подскажете какой лучше компонент/коллекцию выбрать с точки зрения того, что бы запихнуть в него файл с а еще даже в самых ранних версиях фокспро была так называемая макроподстановка - переменной присваивались строки кода, которые потом выполнялись как код. Можно было связать переменную с полем в БД, писать в рантайме код в текстовых полях ДБ, менять его и выполнять без перекомпиляции приложения. увидел в Java лямбда выражения - это попытка сделать что то аналогичное ? Берите ArrayList, работает быстро. Для работы с парсингом текстового файла можете использовать тот же самый Scanner. Создайте класс типа pojo (класс с тем минимумом полей , которые нужны вам для расчета сумм. Так как вы долго и упорно писали на SQL представьте себе какую нибудь итоговую таблицу с столбцами из которой вам наиболее удобно будет делать группировку и сортировку. Представили? Теперь создавайте класс java с таким же типами и набором полей.) При обработке текстового файла, снимайте значение каждой строки и передавайте в соответствующие поля pojo. Его (экземпляр класса pojo c спарсенными данными) и запихивайте в ArrayList как будто бы это одна строка таблицы /строка из текстового файла . После наполнения коллекции ,все что угодно, хоть в хвост, хоть в гриву. Сортируйте пузырьком к примеру, циклом можно посчитать суммы ,среднее, и проч. лямбда это не попытка, это уже давно реализованная функция языка:) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 21:55 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
olegeos, задача на первой странице 9-ый пост ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 22:17 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
[quot Сергей Лалов#22298499] pesets Leonid Kudryavtsev, лямбда это не попытка, это уже давно реализованная функция языка:) ну вот чесслово - слабое подобие левой руки по сравнению с фоксовской макроподстановкой бородатых годов. но я понимэ - фокс все таки интерпретатор ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 22:21 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Сергей Лалов pesets Leonid Kudryavtsev, по второй задаче не подскажете какой лучше компонент/коллекцию выбрать с точки зрения того, что бы запихнуть в него файл с а еще даже в самых ранних версиях фокспро была так называемая макроподстановка - переменной присваивались строки кода, которые потом выполнялись как код. Можно было связать переменную с полем в БД, писать в рантайме код в текстовых полях ДБ, менять его и выполнять без перекомпиляции приложения. увидел в Java лямбда выражения - это попытка сделать что то аналогичное ? Берите ArrayList, работает быстро. Для работы с парсингом текстового файла можете использовать тот же самый Scanner. Создайте класс типа pojo (класс с тем минимумом полей , которые нужны вам для расчета сумм. Так как вы долго и упорно писали на SQL представьте себе какую нибудь итоговую таблицу с столбцами из которой вам наиболее удобно будет делать группировку и сортировку. Представили? Теперь создавайте класс java с таким же типами и набором полей.) При обработке текстового файла, снимайте значение каждой строки и передавайте в соответствующие поля pojo. Его (экземпляр класса pojo c спарсенными данными) и запихивайте в ArrayList как будто бы это одна строка таблицы /строка из текстового файла . После наполнения коллекции ,все что угодно, хоть в хвост, хоть в гриву. Сортируйте пузырьком к примеру, циклом можно посчитать суммы ,среднее, и проч. лямбда это не попытка, это уже давно реализованная функция языка:) искренний сенкс хоть понял куда двигать ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 22:24 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
pesets ну вот чесслово - слабое подобие левой руки по сравнению с фоксовской макроподстановкой бородатых годов. но я понимэ - фокс все таки интерпретатор В основе лямбды лежат замыкания. В sql замыканий нет. (имею в виду не циклические ссылки с ошибкой, а то сейчас пойдёт описание возможных традиционных коротышей ) а именно понятие замыкание. Наверное это в интерпретации sql что то близкое к оконным функциям. Да, наверное так. Из всех ЯП java и sql это пожалуй самые диаметрально противоположные друг к другу) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 00:30 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Это олдовый кодер из тех времён, когда во всю юзали битовые маски. Он вам, ребятишкам, всем еще покажет! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 04:20 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
PetroNotC Sharp >Интересная система счисления: 1, 12, 1234. ===))))))))) Это битовая маска на минималках. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 04:20 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
pesets, Итак из обещанных двух страниц глумления не набралось и половины, что само по себе не плохо. Продолжаем:) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
В целом по коду: 1. Как сказали выше прочитать жабее соглашение по написанию кода - назавния класса с заглавной буквы, полей и переменный со строчной. 2. Кучу когда разбить на мелкие методы Для данного ТЗ этого хватит. Городить что-то с ООП ради ООП я считают тут излишне. Хотели бы оопоты дали бы тз, где это уместно. По поводу самого ООП (и ради наброса) у каждого своё мнение не только относительно его нужности, но и (о ужас) относительно того, как правильно выстраивать иерархию классов. Одни будут считать, что квадрат должен наследоваться от ромба, а другие, что ромб от квадрата. И пока ты 10 раз перепишешь свой лапшекод они еще будут сраться. Кстати вообще не понимаю, что на дядку наехали. Ладно, бы очередной студень, который нихрена не хочет делать, а хочет сдать лабу или работу за 100500 денег. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 05:34 |
|
нужен реинжиниринг короткого кода на java
|
|||
---|---|---|---|
#18+
pesets, По второй задаче, видимо хотят, велик, который будет делать sum с group by. Напрашивается суммирование в HashMap<String, HashMap<Integer, BigDecimal> (за double для денег тут шкуру спустят) Первый ассоц. массив - по точкам, в нём массивы по дням (от начала Эпохи) с суммой или pojo с точкой, днём и суммой (чтобы легче было делать сортировку). Потом map перегнать в какой-нибудь arrayList и отсортировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 05:47 |
|
|
start [/forum/topic.php?fid=59&msg=40056077&tid=2120494]: |
0ms |
get settings: |
22ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
542ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 641ms |
0 / 0 |