|
|
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
Есть ли что-то аналогичное nil для записей? Нужно возвратить из функции nil в том случае, если в массиве записей отсутствует значение с указанным индексом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 13:15 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
Ну так nil и возвращай. Только результат функции объяви как указатель. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 13:18 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
нет в функциональных языках дял этого используется специальный тип Option - по сути запись + флаг её наличия, но при этом разные типы данных - https://en.wikipedia.org/wiki/Option_type в языках типа C# используется Nullable<T>, и его портировали в Delphi например в составе Spring4D Но это не совсем то: http://twistedoakstudios.com/blog/Post1130_when-null-is-not-enough-an-option-type-for-c Можно просто возвращать указатель на запись. Включи типизированные указатели (давно пора в Delphi их по умолчанию включать) и радуйся жизни. Единственное только - надо будет заморачиваться с освобождением памяти. Как там у нас с деструкторами record'ов? Я иногда даже в var-параметры nil передаю. Хак, конечно, но иногда удобный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 13:22 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНу так nil и возвращай. он же из функции хочет - память может потечь.... это ж вам не Rust, это Delphi, явного "хозяина" у переменных нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 13:22 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
Если тебе кровь из носу надо знать о null - функция должна возвращать boolean, а сам рекорд выводи в out параметер. А так, nullable типы толькотв следующей дельфе обещают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 13:47 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
если даже и сделают, наждежнее все равно со стороны брать, по крайней мере в первый 5 лет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 13:53 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
rgreatnullable типы толькотв следующей дельфе обещают. Эти nullable типы ничто иное как запись в булевским "нет значения" и собственно пользовательским типом. С тем же успехом он может добавить флаг "облом" в свою собственную запись уже сейчас. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 14:04 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
rgreatА так, nullable типы толькотв следующей дельфе обещают. Какой только гадости ни тащат... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 14:23 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
amadeusЕсть ли что-то аналогичное nil для записей? Нужно возвратить из функции nil в том случае, если в массиве записей отсутствует значение с указанным индексом. Парнишка, строчно все бросай и берись за буквари. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 14:25 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
Смотря буквари чего. Для функциональных языков, где указателей нет вообще, и как следствие нет никаких nil и Nullable<T>, в букварях пишут про тип Option<T> :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 14:37 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovrgreatnullable типы толькотв следующей дельфе обещают. Эти nullable типы ничто иное как запись в булевским "нет значения" и собственно пользовательским типом. С тем же успехом он может добавить флаг "облом" в свою собственную запись уже сейчас. только это 1) стандартный унифицированный способ "добавить флаг" 2) стандартная ошибка при попытке использовать отсутсвующее значение 3) использование значения по стандартному имени, или вообще без имени (implicit type-cast) А не так, как сейчас в Delphi RTL - половина функций возвращает/принимает TArray<string>, а половина - TStringDynArray; И несмотря на буквально совпадающее определение типов - взаимодействовать отказываются (без явного тайпкаста в каждом поле) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 14:44 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
Если запись со значениями по умолчанию считать пустой, то можно Result := Default(TMyRec); Ну или флаг в записи сделать True или False... Default всегда положит туда False, а при возврате реально класть True ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 15:00 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
В зависимости от содержимого записи можно использовать "пустую" константу типа const NullMyRec: TMyRec = (); и функцию/метод IsNull(const rec: TMyRec), которая бы проверяла наличие необходимых полей, буде таковые имеются. Общего рецепта нет (ну, вернее, возвращать-то можно, а вот проверка на пустоту исключительно на самом юзере). Также можно вместо нулевой константы, если она допустима, взять запись, забитую невалидными данными. Например, $FF-ами - но - это только если в записи нет управляемых типов. Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 15:15 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
В общем случае, все равно должна быть определена константа недопустимой записи. Если при возврате индекса недопустимое значение по логике само определяется как -1, то в случае записи его придется определять отдельно для каждого типа записи. Собственно, как и для любого другого типа внутри контейнера - любое значение, которое принимает тип, допустимо и как элемент контейнера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 15:22 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
Василий 2любое значение, которое принимает тип, допустимо и как элемент контейнера. Собственно, именно поэтому существует два типа методов поиска - * IndexOf: 0..N если успех и -1 если не найдено * Find: <T> если успех и exception если не найдено. Т.к. привыкнув писать list.Find(some condition).SomeField := foo, можно больно получить по шапке загадочным AV в случае ненахождения элемента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 15:27 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
Василий 2Собственно, именно поэтому существует два типа методов поиска Я давно принял для себя соглашение: метод FindXXXXX возвращает XXXXX либо nil, метод GetXXXXX возвращает XXXXX либо exception. Как правило, Get реализован через Find. Но в результате чертовски удобно, универсально, читабельно и при необходимости одно легко меняется на другое, не трогая окружающего кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 15:31 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
softwarerВасилий 2Собственно, именно поэтому существует два типа методов поиска Я давно принял для себя соглашение: метод FindXXXXX возвращает XXXXX либо nil, метод GetXXXXX возвращает XXXXX либо exception. Как правило, Get реализован через Find. Но в результате чертовски удобно, универсально, читабельно и при необходимости одно легко меняется на другое, не трогая окружающего кода. Да, нормально, только предполагает nil-уемость результата (а также недопустимость nil в контейнере). Т.е. для XML, например, - хорошо, а вот для списка с любыми возможными элементами не подойдет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 16:05 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
AriochСмотря буквари чего. Для функциональных языков, где указателей нет вообще, и как следствие нет никаких nil и Nullable<T>, в букварях пишут про тип Option<T> :-)в тру-функциональщине это называется Алгебраический тип данных но тормозит это тоже нехило, так что от лукавого даром не нать такого в системных языках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 16:55 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНу так nil и возвращай. Только результат функции объяви как указатель. + Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 22:17 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
Василий 2* Find: <T> если успех и exception если не найдено. Т.к. привыкнув писать list.Find(some condition).SomeField := foo, можно больно получить по шапке загадочным AV в случае ненахождения элемента. Откуда тут AV возьмётся ? AV - это если оно nil возвращает, а по вашему оно "возвращает" exception ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2019, 12:53 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
amadeusЕсть ли что-то аналогичное nil для записей? Нужно возвратить из функции nil в том случае, если в массиве записей отсутствует значение с указанным индексом. Если вы говорите о массиве, то что возвращает функция? Индекс в массиве? Если да, пусть возвращает -1 если не нашла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2019, 15:18 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
AriochВасилий 2* Find: <T> если успех и exception если не найдено. Т.к. привыкнув писать list.Find(some condition).SomeField := foo, можно больно получить по шапке загадочным AV в случае ненахождения элемента. Откуда тут AV возьмётся ? AV - это если оно nil возвращает, а по вашему оно "возвращает" exception Я имел в виду, если возвращать nil или некий невалид ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2019, 17:57 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
Кроик СемёнЕсли вы говорите о массиве, то что возвращает функция? Индекс в массиве? Если да, пусть возвращает -1 если не нашла. Очевидно, что ТС хочет Container.Find: TRecord Вообще поскольку за возвратом "нулевого" или "невалидного" значения записи, скорее всего, последует проверка на "нулевость", особой проблемы не наблюдаю. Как, имхо, хочет ТС Код: pascal 1. 2. 3. 4. Как это можно сделать без всяких хаков и усилий и даже короче Код: pascal 1. 2. 3. А вообще классическая ситуация - ТС куда-то слился, а старожилы вторую неделю что-то между собой пережевывают)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2019, 18:04 |
|
||
|
nil для записи
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)AriochСмотря буквари чего. Для функциональных языков, где указателей нет вообще, и как следствие нет никаких nil и Nullable<T>, в букварях пишут про тип Option<T> :-)в тру-функциональщине это называется Алгебраический тип данных но тормозит это тоже нехило, так что от лукавого даром не нать такого в системных языкахвот не надо придумывать. ADT это несущественные накладные расходы, как возврат структуры - не более Софтварер выше прав, если есть исключения, АДТ не нужны (они используются вместо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2019, 21:37 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39790023&tid=2039655]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
160ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 423ms |

| 0 / 0 |
