Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> если функция ничего не возвращает 
:(
    Опции темы
supervladislav
Дата 5.9.2012, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


///\\\///\\\///\\\
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 18.5.2006

Репутация: нет
Всего: -9



Скажите , пишу первую функцию ,у меня возник  вопрос.
Какой возвращаемый результат должен  быть у функции если она ничего не возвращает



PM MAIL   Вверх
northener
Дата 5.9.2012, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(supervladislav @  5.9.2012,  21:51 Найти цитируемый пост)
если она ничего не возвращает

Функция, которая ничего не возвращает называется процедура. procedure


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
supervladislav
Дата 5.9.2012, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


///\\\///\\\///\\\
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 18.5.2006

Репутация: нет
Всего: -9



northener, тоесть хотябы да или нет функция должна возвращать так чтоли?

Добавлено через 10 минут и 42 секунды
Я имел ввиду корректно если функция сработала то она возвращает да в противном нет ,так?
PM MAIL   Вверх
Данкинг
Дата 5.9.2012, 23:12 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Ну, пиши result:='' 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
northener
Дата 6.9.2012, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(supervladislav @  5.9.2012,  22:28 Найти цитируемый пост)
northener, тоесть хотябы да или нет функция должна возвращать так чтоли?

Добавлено через 10 минут и 42 секунды
Я имел ввиду корректно если функция сработала то она возвращает да в противном нет ,так? 

Опять нужен учебник для начинающих.
Функция должна возвращать хоть что-то ибо она может быть в правой части выражения.
В отличии от функции процедура не должна что -либо возвращать.

Это сообщение отредактировал(а) northener - 6.9.2012, 00:42


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
supervladislav
Дата 7.9.2012, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


///\\\///\\\///\\\
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 18.5.2006

Репутация: нет
Всего: -9



northener, вобще если судить по примеру кода ,то везде  где объявляется  функция  в конце пишется тип возвращаемых данных,но невсегда функция чео либо возвращает.
Вобще неплохо было бы об этом написать в книге.
PM MAIL   Вверх
Данкинг
Дата 7.9.2012, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(supervladislav @  7.9.2012,  17:17 Найти цитируемый пост)
но невсегда функция чео либо возвращает.

Если функция вызывается - то она непременно что-то возвратит.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
bems
Дата 8.9.2012, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(supervladislav @  7.9.2012,  16:17 Найти цитируемый пост)
везде  где объявляется  функция  в конце пишется тип возвращаемых данных,но невсегда функция чео либо возвращает
функция всегда должна что-то возвращать. Если твоя функция не при всех вариантах возвращает значение то ты должен считать это ошибкой. Но возвращаемое значение может игнорироваться. Например вызов sin(0); (без присваивания результата) вполне корректен.



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Poseidon
Дата 15.9.2012, 15:02 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(supervladislav @  5.9.2012,  21:51 Найти цитируемый пост)
Какой возвращаемый результат должен  быть у функции если она ничего не возвращает
Если функция ничего не возвращает, то результатом такой функции будет значение по умолчанию для объявленного типа функции. Т.е. функция, которая должна была вернуть string - вернет пустую строку. Та, что должна была вернуть integer, по идее вернет 0 (но не всегда). Но, во-первых, не стоит рассчитывать на подобный результат, особенно если от этого результата зависит ход вычислений. Во-вторых, это плохой тон, не давать результату функции значение. Даже если вычисления в функции не дали никакого результата, нужно присвоить значение Result, по которому будет понятно, что функция безрезультатна.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
БелАмор
Дата 15.9.2012, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 7
Всего: 17



Цитата(Poseidon @  15.9.2012,  16:02 Найти цитируемый пост)
Если функция ничего не возвращает, то результатом такой функции будет значение по умолчанию для объявленного типа функции. Т.е. функция, которая должна была вернуть string - вернет пустую строку.

Вы неправы.
Конкретный пример:
Переменная Result типа string может иметь непустое начальное значение

Цитата(supervladislav @  7.9.2012,  17:17 Найти цитируемый пост)
northener, вобще если судить по примеру кода ,то везде  где объявляется  функция  в конце пишется тип возвращаемых данных,но невсегда функция чео либо возвращает.

В Языке Си, например, нет разделения подпрограмм на функции и процедуры. Там всё - функции. Функция, не возвращающая значение, имеет тип void. В Паскале же подпрограммы чётко разделены на функции и процедуры. Если в Паскале подпрограмма не должна возвращать значение, она называется процедурой. Если подпрограмма названа функцией, она обязана что-то вернуть. Причём в любом случае. Если компилятор обнаруживает, что возможна ситуация, при которой переменной Result не будет ничего присвоено, он выдаёт предупреждение. Сразу привыкайте, что при компиляции программы не должно быть ни одного предупреждения, какими бы незначительными они вам ни казались.
Вообще, пытаться что-либо писать с такими знаниями - пустая трата времени. Прочитайте какую-нибудь книжку для начинающих, чтобы знать хотя бы самые минимальные основы. Посоветовать что-то конкретное я не могу, но по содержанию можно ориентироваться, например, на эту книгу:
"Delphi XE2" Осипов Д.
Вас должны интересовать главы до 28.
Ваш нынешний вопрос относится к страницам 53 и 55.

PM   Вверх
lomaster
Дата 15.9.2012, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.5.2012

Репутация: нет
Всего: 2



Чтобы функция не возвращала результат, возбудите исключение, но и ловить не забудте.
Если логика кода может или не может возвращать, то тут надо смотреть на суть. От этого зависит что применить функцию или процедуру.
PM   Вверх
БелАмор
Дата 15.9.2012, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 7
Всего: 17



Кстати, для начала можно почитать этот цикл статей:
Учебное пособие по программированию на языке Delphi
Написано всё это достаточно давно, поэтому там нет многих нововведений, в частности, ничего не говорится о вопросах, связанных с поддержкой Юникода, но познакомиться с самыми азами - вполне.

Это сообщение отредактировал(а) БелАмор - 15.9.2012, 17:44
PM   Вверх
Poseidon
Дата 15.9.2012, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(БелАмор @  15.9.2012,  16:35 Найти цитируемый пост)
Вы неправы.
Вы не умеете читать

Ваше
Цитата(БелАмор @  15.9.2012,  16:35 Найти цитируемый пост)
Переменная Result типа string может иметь непустое начальное значение


Мое
Цитата(Poseidon @  15.9.2012,  15:02 Найти цитируемый пост)
Если функция ничего не возвращает, то результатом такой функции будет значение по умолчанию для объявленного типа функции. Т.е. функция, которая должна была вернуть string - вернет пустую строку. Та, что должна была вернуть integer, по идее вернет 0 (но не всегда). Но, во-первых, не стоит рассчитывать на подобный результат, особенно если от этого результата зависит ход вычислений. 


Есть принципиальные отличия? Особенно если мы говорим про такой нестандартный в практике вопрос.

Добавлено через 2 минуты и 12 секунд
Цитата(БелАмор @  15.9.2012,  16:35 Найти цитируемый пост)
Сразу привыкайте, что при компиляции программы не должно быть ни одного предупреждения, какими бы незначительными они вам ни казались.
Попробуйте поработать с текстом в разных кодировках в последних версиях Delphi. Предупреждений о том, что лучше использовать одну функцию, а не другую, не оберетесь. 



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
bems
Дата 15.9.2012, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(Poseidon @  15.9.2012,  15:02 Найти цитируемый пост)
Если функция ничего не возвращает, то результатом такой функции будет значение по умолчанию для объявленного типа функции.
если и будет, то это случайность
компилятор гарантирует только корректность работы с автоматическими типами

То что ты говоришь что это не всегда, выглядит как-то странно, потому что такое поведение скорее случайность



--------------------
Обижено школьников: 8
PM MAIL   Вверх
БелАмор
Дата 15.9.2012, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 7
Всего: 17



Цитата(Poseidon @  15.9.2012,  19:58 Найти цитируемый пост)
Ваше

Цитата(БелАмор @  15.9.2012,  16:35 )
Переменная Result типа string может иметь непустое начальное значение

Я привёл пример для того, чтобы показать, что есть как минимум одно исключение. А если есть одно исключение, то общее правило перестаёт быть общим. Поэтому, независимо от того, что там реально возвращает функция при неприсвоенном результате, всегда следует считать, что она возвращает мусор.

Цитата(Poseidon @  15.9.2012,  16:02 Найти цитируемый пост)
Но, во-первых, не стоит рассчитывать на подобный результат, особенно если от этого результата зависит ход вычислений.

Прошу извинить меня за занудство, но лично для меня разница между "не стоит" и "категорически нельзя" является принципиальной.

Цитата(Poseidon @  15.9.2012,  16:02 Найти цитируемый пост)
Во-вторых, это плохой тон, не давать результату функции значение. Даже если вычисления в функции не дали никакого результата, нужно присвоить значение Result, по которому будет понятно, что функция безрезультатна.

Дело не только в том, что нужно, чтобы было понятно, что функция безрезультатна. Нужно ещё:
1. Исключить в принципе потенциальную возможность где-то потом нарваться на мусор в результате.
2. Убрать предупреждение компилятора, которое захлямляет окно сообщений.

При большом количестве предупреждений смысл предупреждений практически теряется, поскольку обнаружить одно новое сообщение среди десятков других становится практически нереально, и уже нет никакой разницы включены у вас предупреждения, или отключены совсем.

Цитата(Poseidon @  15.9.2012,  19:58 Найти цитируемый пост)
Попробуйте поработать с текстом в разных кодировках в последних версиях Delphi. Предупреждений о том, что лучше использовать одну функцию, а не другую, не оберетесь.

Про юникодные версии я пока воздержусь высказывать мнение, но на неюникодных до сих пор удавалось придерживаться правила "ни одного предупреждения при компиляции".
Поставить else в том-же case, даже если других вариантов тут не может быть, меня пока не особо напрягало.
А предупреждения иногда указывают на действительно серьёзные упущения. И было бы хорошо не потерять такие предупреждения в горах мусора.

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1139 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.