ideas icon indicating copy to clipboard operation
ideas copied to clipboard

Добавить функциям имя возвращаемого значения

Open perfectGenius opened this issue 1 year ago • 5 comments

Язык позволяет давать имена параметрам, передаваемым функции, отчего достаточно в IDE навести курсор на функцию и увидеть их. Но, чтобы узнать что она возвращает, надо лезть в код функции или читать документацию. Но ведь было бы значительно удобнее узнавать таким же способом - наведением курсора в IDE. Варианты, где можно расположить имя возвращаемого:

int [код_ошибки] прочитать_файл_в_память(UINT начало, UINT конец) или return [код_ошибки] ФАЙЛ_ПУСТОЙ

perfectGenius avatar May 08 '24 23:05 perfectGenius

int /* sum */ sum(int a, int b) типа того что ли? Кажется существующих языковых выразительных средств уже достаточно. IDE умеют вытаскивать doxygen комментарии во всплывающие подсказки.

tomilov avatar May 08 '24 23:05 tomilov

int /* sum */ sum(int a, int b)

Проверил в VS2022, не показывает.

doxygen

Кроме языка надо ещё учить целую отдельную систему, просто отлично. И даже с существованием таких средств Visual Studio почему-то мне не показывает, что printf() возвращает количество напечатанного. Т.е. есть какая-то причина, почему они не стали стандартом. Всё это выглядит костылями, хотя имя возвращаемого для меня кажется фундаментальной частью языков наравне с именами параметров.

perfectGenius avatar May 09 '24 15:05 perfectGenius

Имя функции описывает имя возвращаемого значения. Если это не так, то возвращаемое значение - не самое главное в функции и читайте что-то за пределами кода

vtopunov avatar May 10 '24 09:05 vtopunov

Если вам нужна гибкость и информативность используйте структуры для описания сложных, настраиваемых функций или функций с контекстами:

struct adc {
	unsigned a,b,c; // input
	unsigned r,f;   // output
	adc& run() {    // body
		r=a+b+(c&1); f=0;
		unsigned s=~(~((unsigned)0)>>1);
		if (r<a || r<b) f|=1;
		if ((a&s)==(b&s) && ((a&s)!=(r&s))) f|=2;
		return *this;
	}
	unsigned result() const { return r; }
	bool unsigned_overflow() const { return f&1; }
	bool signed_overflow() const { return f&2; }
};

#include <stdio.h>
int main(int argc, char const *argv[]) {
	unsigned smax=~((unsigned)0)>>1;
	printf("0x%08X\n",adc{smax,1,1}.run().result());
}

kov-serg avatar May 10 '24 17:05 kov-serg

есть несколько способов сделать возвращаемый тип более понятным для читаемости в IDE. Например, можно использовать using:

using ErrorCode = int;

ErrorCode read_file_to_memory(UINT start, UINT end);

можно использовать struct для именования результатов

struct ReadFileResult {
    int error_code;
    size_t bytes_read;
};

ReadFileResult read_file_to_memory(UINT start, UINT end);

he090279kap avatar Feb 03 '25 17:02 he090279kap