Сообщение Re[2]: Передача аргументов в функцию - позиционные vs именов от 19.03.2025 9:50
Изменено 19.03.2025 9:51 netch80
Re[2]: Передача аргументов в функцию - позиционные vs именованные
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Shmj, Вы писали:
S>>Какой вариант вам удобнее?
S>Если в функции — сорок параметров, из которых 38 необязательные, то именованные удобнее. Если в функции — два параметра, и оба обязательные, то удобнее позиционные.
S>Ваш К.О.
(голосом удава) А три — это куча?
Я в одном проекте нашёл три или четыре места, где у memset() перепутали длину и заполнитель, а так в C++ это параметры оба целые, никакого плача от компилятора не было.
В итоге я выдвинул правку — сделать хелпер типа
и все вызовы перекинул на MemsetCaller(a, len).fillWith('\xA5') и в таком же духе.
Это отличный пример, где принудительно именованные аргументы точно пригодились бы.
S>Здравствуйте, Shmj, Вы писали:
S>>Какой вариант вам удобнее?
S>Если в функции — сорок параметров, из которых 38 необязательные, то именованные удобнее. Если в функции — два параметра, и оба обязательные, то удобнее позиционные.
S>Ваш К.О.
(голосом удава) А три — это куча?
Я в одном проекте нашёл три или четыре места, где у memset() перепутали длину и заполнитель, а так в C++ это параметры оба целые, никакого плача от компилятора не было.
В итоге я выдвинул правку — сделать хелпер типа
class MemsetCaller {
void *mAddress;
size_t mLength;
public:
MemsetCaller(void *address, size_t length) : mAddress(address), mLength(length) {}
void fillWith(char c) { ::memset(mAddress, c, mLength); // сам проверял по ману когда это сейчас писал
}
};и все вызовы перекинул на MemsetCaller(a, len).fillWith('\xA5') и в таком же духе.
Это отличный пример, где принудительно именованные аргументы точно пригодились бы.
Re[2]: Передача аргументов в функцию - позиционные vs именов
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Shmj, Вы писали:
S>>Какой вариант вам удобнее?
S>Если в функции — сорок параметров, из которых 38 необязательные, то именованные удобнее. Если в функции — два параметра, и оба обязательные, то удобнее позиционные.
S>Ваш К.О.
(голосом удава) А три — это куча?
Я в одном проекте нашёл три или четыре места, где у memset() перепутали длину и заполнитель, а так в C++ это параметры оба целые, никакого плача от компилятора не было.
В итоге я выдвинул правку — сделать хелпер типа
и все вызовы перекинул на MemsetCaller(a, len).fillWith('\xA5') и в таком же духе.
Это отличный пример, где принудительно именованные аргументы точно пригодились бы.
UPD: Кто скажет, мол, IDE должна помочь — подставляйте лоб, метаю камень без раздумий. Полно случаев, когда IDE не справляется или вообще не может быть применена.
S>Здравствуйте, Shmj, Вы писали:
S>>Какой вариант вам удобнее?
S>Если в функции — сорок параметров, из которых 38 необязательные, то именованные удобнее. Если в функции — два параметра, и оба обязательные, то удобнее позиционные.
S>Ваш К.О.
(голосом удава) А три — это куча?
Я в одном проекте нашёл три или четыре места, где у memset() перепутали длину и заполнитель, а так в C++ это параметры оба целые, никакого плача от компилятора не было.
В итоге я выдвинул правку — сделать хелпер типа
class MemsetCaller {
void *mAddress;
size_t mLength;
public:
MemsetCaller(void *address, size_t length) : mAddress(address), mLength(length) {}
void fillWith(char c) { ::memset(mAddress, c, mLength); // сам проверял по ману когда это сейчас писал
}
};и все вызовы перекинул на MemsetCaller(a, len).fillWith('\xA5') и в таком же духе.
Это отличный пример, где принудительно именованные аргументы точно пригодились бы.
UPD: Кто скажет, мол, IDE должна помочь — подставляйте лоб, метаю камень без раздумий. Полно случаев, когда IDE не справляется или вообще не может быть применена.