Вот если мы сравниваем два нулевых указателя, то получаем true.
А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
У несуществующих файлов есть id, Name, или Hash?
Существование файла — это bool, int, или string[]?
Друга ищи не того, кто любезен с тобой, кто с тобой соглашается, а крепкого советника, кто полезного для тебя ищет и противится твоим необдуманным словам.
Здравствуйте, Osaka, Вы писали:
BFE>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false? O>У несуществующих файлов есть id, Name, или Hash?
Есть Name. Возможно даже два.
O>Существование файла — это bool, int, или string[]?
А как надо?
Здравствуйте, Евгений Музыченко, Вы писали:
BFE>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false? ЕМ>Наверное, должно как-то зависеть от степени чистоты вакуума.
Да ладно! Философия или где?
Вот функция: bool AreEqualFiles(string strFilename1, string strFilename2); что должна возвращать?
Здравствуйте, B0FEE664, Вы писали:
BFE>Вот если мы сравниваем два нулевых указателя, то получаем true. BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
ну допустим файл это не что иное как file descriptor
несуществующий файл это ENOENT
сравнение двух ENOENT даст true
BFE>Да ладно! Философия или где? BFE>Вот функция: bool AreEqualFiles(string strFilename1, string strFilename2); что должна возвращать?
Ну я бы кидал исключение "FileNotFound", потому что это сделает fail early легиону багов "ой, у нас тут путь потерялся", "ой, расширение не добавили", "ой на Linux case matters", и т.д.
Если принципиально хочется выпендриться, и функция в каком-то довольно универсальном API, то, в случае когда обоих нет, можно сравнить имена. Имена равны => true, потому что это один и тот же файл и он стопудово будет равен самому себе, когда только появится. Имена разные разные => false, по логике того же double NaN.
Но глобально, прежде чем выпендриваться, надо тогда подумать про пользователя этой функции. Если это API для каких-нибудь разных стратегий кэширования, которые открывают файлы исплючительно через OpenOrCreateNew, то для несуществующих файлов вообще можно возвращать всегда true. Потому что с точки зрения такого пользователя существуют абсолютно все файлы, просто часть из них пустые. А если клиент не такой экзотический, то всё-таки исключение однозначно лучше, кмк.
Здравствуйте, B0FEE664, Вы писали:
BFE>Вот если мы сравниваем два нулевых указателя, то получаем true. BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
Функция сравнения должна возвращать < > или =
А у вас функция проверки идентичности.
И должна она возвращать Identical если одинаковые, Different если разные и NoResult если по каким-то причинам пока невозможно их сравнить
Здравствуйте, B0FEE664, Вы писали:
BFE>Вот если мы сравниваем два нулевых указателя, то получаем true. BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
Не стоит в один ряд помещать сишные указатели и файлы. Более того, в некоторых языках два nul-указателя/ссылки на объекты не будут равны, на nul надо проверять использованием какого-нибудь isNul()
O>>Существование файла — это bool, int, или string[]? BFE>А как надо?
Очевидно, если файл должен существовать в нескольких местах, а существует во всех/некоторых/ни в одном, — это разные степени не-существования.
А какая точность нужна в конкретном случае — для этого нужно знать предметную область.
Друга ищи не того, кто любезен с тобой, кто с тобой соглашается, а крепкого советника, кто полезного для тебя ищет и противится твоим необдуманным словам.
BFE>Вот если мы сравниваем два нулевых указателя, то получаем true. BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
Если аналогия с указателями, то эти файлы существуют, но пустые.
Должно давать true
Размер одинаковый (ноль), а содержания нет ни одного байта.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
BFE>>Вот если мы сравниваем два нулевых указателя, то получаем true. BFE>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false? LVV>Если аналогия с указателями, то эти файлы существуют, но пустые. LVV>Должно давать true LVV>Размер одинаковый (ноль), а содержания нет ни одного байта.
Файл с нулевым размером может существовать, а может не существовать. Два таких файла идентичны?
Здравствуйте, B0FEE664, Вы писали:
BFE>Вот если мы сравниваем два нулевых указателя, то получаем true. BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
Имхо, эта аналогия не совсем корректна. Значения указетелей нулевые, но сами указатели, всё-таки, существуют как объекты. И более корректной аналогией сравнения нулевых указателей было бы сравнение двух пустых файлов.
Семантика же операции сравнения несуществующих файлов, я думаю, будет определяться спецификой задачи верхнего уровня, в рамках которой потребность в таком сравнении возникла. Операция странная, как по мне, и общего правила я тут не вижу. Короче, как сам решишь, так и будет.
--
Справедливость выше закона. А человечность выше справедливости.
BFE>>>Вот если мы сравниваем два нулевых указателя, то получаем true. BFE>>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false? LVV>>Если аналогия с указателями, то эти файлы существуют, но пустые. LVV>>Должно давать true LVV>>Размер одинаковый (ноль), а содержания нет ни одного байта. D>Файл с нулевым размером может существовать, а может не существовать. Два таких файла идентичны?
А как ты несуществующий файл свяжешь с объектом в программе ?
Ты ж не с самим файлами работаешь, а с объектами программы.
Или filesystem это позволяет ? Я просто не пользовался.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
BFE>>>>Вот если мы сравниваем два нулевых указателя, то получаем true. BFE>>>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false? LVV>>>Если аналогия с указателями, то эти файлы существуют, но пустые. LVV>>>Должно давать true LVV>>>Размер одинаковый (ноль), а содержания нет ни одного байта. D>>Файл с нулевым размером может существовать, а может не существовать. Два таких файла идентичны? LVV>А как ты несуществующий файл свяжешь с объектом в программе ? LVV>Ты ж не с самим файлами работаешь, а с объектами программы. LVV>Или filesystem это позволяет ? Я просто не пользовался.
Просто это одно из условий задачи, сформулированной в изначальном посте. А пост этот в Философии.
Здравствуйте, LaptevVV, Вы писали:
BFE>>Вот если мы сравниваем два нулевых указателя, то получаем true. BFE>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false? LVV>Если аналогия с указателями, то эти файлы существуют, но пустые. LVV>Должно давать true LVV>Размер одинаковый (ноль), а содержания нет ни одного байта.
BFE>>>Вот если мы сравниваем два нулевых указателя, то получаем true. BFE>>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false? LVV>>Если аналогия с указателями, то эти файлы существуют, но пустые. LVV>>Должно давать true LVV>>Размер одинаковый (ноль), а содержания нет ни одного байта.
VF>А если у одного из файлов имя invalid?
Тогда пишите новый тип данных, у которого понятие "пустой" содержит не единственное значение.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, B0FEE664, Вы писали:
BFE>Вот если мы сравниваем два нулевых указателя, то получаем true. BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
Если "написать функцию сравнения двух файлов, на входе — 2 имени, на выходе — boolean" — это уже утвержденное/согласованное ТЗ, а стандартные функции получения длины и содержимого файла по его имени бросают исключения, то и функция сравнения должна пробросить эти исключения выше — программист не должен фантазировать, добавлять что-то в ТЗ от себя, да еще и писать лишний код. Об этом же и принцип YAGNI.
Если используемые стандартные файловые функции выдают информацию об ошибках доступа/несуществования файлов/папок как-то иначе — было бы логично следовать их принципу (наша функция вроде бы тоже "файловая") и передавать эту инфу выше (только если это не противоречит ТЗ).
Конечно, если есть возможность уточнить ТЗ — лучше это сделать.
Если эту задачу поставил себе сам программист — кому как не ему лучше знать ответ. Но в общем случае опять же YAGNI рулит.
Здравствуйте, B0FEE664, Вы писали:
BFE>Вот если мы сравниваем два нулевых указателя, то получаем true. BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
Зависит исключительно от внутренних правил системы
1 вариант
Файлы обязаны существовать даже с пустым содержимым, отсутсвующий файл — ошибка.
В этом случае сравнение обязано возвращать false — неравно. Это если оно не возвращает исключений.
2 вариант
Пустые файлы в целях оптимизации могут не записываться. Тогда отсутсвующий файл эквивалентен пустому.
В этом случае должно вернуть true.