Функции и процедуры в языке Перфолента.NET — различия между версиями
Материал из ТХАБ.РФ
Тест (обсуждение | вклад) (Новая страница: « {{Описание языка Перфолента.NET-Содержание}} == Ссылки == * [http://promcod.com.ua/cat.asp?cat=perfolenta-programmig-…») |
(→Ссылки) |
||
(не показано 12 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
+ | {{Описание языка Перфолента.NET-Содержание}} | ||
+ | |||
+ | == Вопросы == | ||
+ | |||
+ | 1. Может ли функция ввернуть 2 значения ? | ||
+ | |||
+ | Возврат Значение1 и Значение2 | ||
+ | |||
+ | * при необходимости вернуть из функции несколько значений можно использовать [[кортеж]]: | ||
+ | Возврат $(А,Б,С) | ||
+ | |||
+ | посмотрите в примере [[кортеж]]и... | ||
+ | |||
+ | == Формат == | ||
+ | Функциям и процедурам в качестве параметров передаются Поля, переменные используются только внутри Процедур и функций и их время жизни равно времени исполнения Процедуры/Функции. | ||
+ | |||
+ | |||
+ | '''Функция''' фИмяФункции (Поле1 тип Число, Поле2 тип Строка) тип Число | ||
+ | Объявление внутренних переменных | ||
+ | Код функции | ||
+ | '''Возврат''' ВозвращаемоеЗначение // типа Число | ||
+ | '''КонецФункции''' | ||
+ | |||
+ | === Пример Функции === | ||
+ | |||
+ | Функция фКоличествоЭмитентов(ДоходностьБезРиска тип Число, Доходность_С_Риском тип Число, цДопустимоеКоличествоДефолтов тип Число) тип Число | ||
+ | КоличествоЭмитентов = 100/ ((Доходность_С_Риском - ДоходностьБезРиска)/цДопустимоеКоличествоДефолтов) | ||
+ | Возврат КоличествоЭмитентов | ||
+ | КонецФункции | ||
+ | |||
+ | === Передача данных === | ||
+ | * в VB в функцию передавались значения как ByValue и ByRef - если значения передавались как ByRef то внутри функции можно было менять внешние переменные , как в перфоленте отдавать вычисленные значения наружу функции только через Функции и кортежи ? | ||
+ | |||
+ | ** Точно также как в VB... ByVal = Знач, а ByRef = Ссыл... , по умолчанию используется Знач, в отличие от 1С, где по умолчанию по ссылке параметры передаются... долго думал, сделать как в 1С или как в .Net и принял решение, что раз Перфолента основана на нет, то пусть будет как в Net... хотя это одно из критических изменений с точки зрения совместимости с 1С... | ||
+ | |||
+ | ==== Формат ==== | ||
+ | |||
+ | '''Функция''' фИмяФункции ([Знач] Поле1 тип Число, Ссыл Поле2 тип Строка) тип Число | ||
+ | Объявление внутренних переменных | ||
+ | Код функции | ||
+ | '''Возврат''' ВозвращаемоеЗначение // типа Число | ||
+ | '''КонецФункции''' | ||
+ | |||
+ | '''Знач''' - можно не писать т.к. оно используется по умолчанию | ||
+ | == Формат Процедуры == | ||
+ | Процедура отличается от функции тем что не возвращает значение. | ||
+ | '''Процедура''' фИмяПроцедуры(Поле1 тип Число, Поле2 тип Строка) | ||
+ | '''КонецФункции''' | ||
− | + | === Пример Процедуры === | |
+ | |||
+ | //--Пример процедуры | ||
+ | Процедура РазложениеНаМножители(цИсходноеЧисло тип Целое) | ||
+ | |||
+ | ТекщийДелитель=2 //текущий делитель - Внутренняя переменная | ||
+ | Пока цИсходноеЧисло <> 1 | ||
+ | Если цИсходноеЧисло % ТекщийДелитель = 0 | ||
+ | ВыводСтроки ТекщийДелитель | ||
+ | цИсходноеЧисло/=ТекщийДелитель //целочисленное деление | ||
+ | Иначе | ||
+ | ТекщийДелитель++ | ||
+ | КонецЕсли | ||
+ | КонецЦикла | ||
+ | КонецПроцедуры | ||
+ | |||
+ | === Возможные ошибки === | ||
+ | |||
+ | Каждую переменную (пока) надо объявлять отдельно. | ||
+ | |||
+ | *НЕПРАВИЛЬНОЕ объявление Полей функции | ||
+ | |||
+ | Функция фИмяФункции( Поле1, Поле2 тип Число, Поле3 тип Строка) тип Число | ||
+ | |||
+ | * ПРАВИЛЬНОЕ объявление переменных функции | ||
+ | |||
+ | Функция фИмяФункции( Поле1 тип Число, Поле2 тип Число, Поле3 тип Строка) тип Число | ||
+ | |||
+ | == Пример объявления и использования функций и процедур == | ||
+ | |||
+ | #ТипСборки КонсольноеПриложение | ||
+ | #ИспользоватьСтандартнуюБиблиотеку | ||
+ | ИмпортИмён Промкод.Перфолента.Консоль | ||
+ | //пример использования Функций и Процедур | ||
+ | Программа Облигации | ||
+ | //-- | ||
+ | Процедура Старт // основная процедура, точка начала программы | ||
+ | // Как рассчитать ROE - Возврат на инвестиции - ВозвратИнвестиций | ||
+ | // Собственный капитал (equity) = активы (assets) — обязательства (Долги liabilities) | ||
+ | // ROE (return on equity) = прибыль (net income)/собственный капитал (equity) | ||
+ | // По сути, ВозвратИнвестиций — это та процентная ставка, под которую в компании работают средства акционеров. | ||
+ | // Этот показатель является ключевым для определения эффективности деятельности компании. | ||
+ | #Область "Расчёт Возврата инвестиций (ROE)" | ||
+ | Перем ВозвратИнвестиций, ПрибыльПослеНалогов, Активы, Долги тип Число // обьявление переменных | ||
+ | // инициализация переменных | ||
+ | ПрибыльПослеНалогов = 100 | ||
+ | Активы = 200 | ||
+ | Долги = 600 | ||
+ | |||
+ | // пример простых вычислений | ||
+ | ВозвратИнвестиций = ПрибыльПослеНалогов/(Активы - Долги) | ||
+ | // или для акций | ||
+ | // ВозратИнвестицийАкции = ДивидендыПослеНалогов/ЦенаПокупкиАкции | ||
+ | |||
+ | // 1) есть операторы ВыводСтроки и ВводСтроки (редактор их красным цветом показывает) | ||
+ | // после которых не надо круглые скобки ставить. | ||
+ | // А есть методы объекта Консоль Вывод и ВыводПС после которых надо круглые скобочки ставить | ||
+ | // т.к. это вызов метода, а не оператор... | ||
+ | // 2) в стандартной библиотеке уже есть функции для вычисления факториала: | ||
+ | // Математика.ФакториалЧ и Математика.ФакториалБЦ... посмотрите в синтакс помощнике объект математика, | ||
+ | // там очень много математических функций... | ||
+ | // объект Математика можно импортировать, что бы каждый раз это слово не писать... | ||
+ | // ИмпортИмён Промкод.Перфолента.Математика | ||
+ | |||
+ | ВыводСтроки "Возврат Инвестиций = "+ВозвратИнвестиций | ||
+ | |||
+ | #КонецОбласти | ||
+ | // 1) разложение целого числа на простые множители | ||
+ | РазложениеНаМножители(232) | ||
+ | // использование Факториал | ||
+ | ЗначениеФакториал = фВычислитьФакториал(15) | ||
+ | |||
+ | ВыводСтроки "Факториа 15 = " + ЗначениеФакториал | ||
+ | // или так без перевода строки | ||
+ | Вывод( "Факториа 15 = " + ЗначениеФакториал) | ||
+ | // проверка Функции КоличествоЭмитентов | ||
+ | // Несколько переменных, вывод прямо в ВыводСтроки без промежуточных переменных | ||
+ | ВыводСтроки "Число Эмитентов = " + фКоличествоЭмитентов(6,10,2) // доходность 6% без риска, 10% с риском дефолта 2х эмитентов | ||
+ | |||
+ | Пауза | ||
+ | КонецПроцедуры | ||
+ | #Область "Примеры Процедуры и Функции" | ||
+ | //--Пример процедуры | ||
+ | Процедура РазложениеНаМножители(цИсходноеЧисло тип Целое) | ||
+ | |||
+ | ТекщийДелитель=2 //текущий делитель - Внутренняя переменная | ||
+ | Пока цИсходноеЧисло <> 1 | ||
+ | Если цИсходноеЧисло % ТекщийДелитель = 0 | ||
+ | ВыводСтроки ТекщийДелитель | ||
+ | цИсходноеЧисло/=ТекщийДелитель //целочисленное деление | ||
+ | Иначе | ||
+ | ТекщийДелитель++ | ||
+ | КонецЕсли | ||
+ | КонецЦикла | ||
+ | КонецПроцедуры | ||
+ | // Функция вычисления факториала | ||
+ | // название функции фВычислитьФакториал – префикс ф –для удобства чтобы сразу было видно что это функция | ||
+ | Функция фВычислитьФакториал(цЧисло тип Целое) тип Число | ||
+ | Перем Факториал тип Число = 1 // Факториал - внутренняя переменная | ||
+ | Для цИндекс тип Целое = 2 По цЧисло // ц – префикс целого числа | ||
+ | Факториал = Факториал * цИндекс | ||
+ | // или сокращённая запись Факториал *= Инд | ||
+ | КонецЦикла | ||
+ | Возврат Факториал | ||
+ | КонецФункции | ||
+ | |||
+ | #КонецОбласти | ||
+ | |||
+ | #Область "Финансы" | ||
+ | // НЕПРАВИЛЬНОЕ объявление переменных функции | ||
+ | // Функция фКоличествоЭмитентов(ДоходностьБезРиска, Доходность_С_Риском тип Число, цДопустимоеКоличествоДефолтов тип Число) тип Число | ||
+ | |||
+ | // ПРАВИЛЬНОЕ объявление переменных функции | ||
+ | // Вычисление степени диверсификации эмитентов в зависимости | ||
+ | // от доходности с риском и без риска и допустимого количекства дефолтов | ||
+ | |||
+ | Функция фКоличествоЭмитентов(ДоходностьБезРиска тип Число, Доходность_С_Риском тип Число, цДопустимоеКоличествоДефолтов тип Число) тип Число | ||
+ | |||
+ | КоличествоЭмитентов = 100/ ((Доходность_С_Риском - ДоходностьБезРиска)/цДопустимоеКоличествоДефолтов) | ||
+ | |||
+ | Возврат КоличествоЭмитентов | ||
+ | КонецФункции | ||
+ | |||
+ | #КонецОбласти | ||
+ | КонецПрограммы | ||
== Ссылки == | == Ссылки == | ||
− | * [http:// | + | * [http://perfolenta.net Официальная страница языка программирования Перфолента.NET] |
[[Категория:Описание языка Перфолента.NET]] | [[Категория:Описание языка Перфолента.NET]] |
Текущая версия на 17:17, 12 августа 2024
'Показать Содержание Описание языка Перфолента.NET'
Вопросы
1. Может ли функция ввернуть 2 значения ?
Возврат Значение1 и Значение2
- при необходимости вернуть из функции несколько значений можно использовать кортеж:
Возврат $(А,Б,С)
посмотрите в примере кортежи...
Формат
Функциям и процедурам в качестве параметров передаются Поля, переменные используются только внутри Процедур и функций и их время жизни равно времени исполнения Процедуры/Функции.
Функция фИмяФункции (Поле1 тип Число, Поле2 тип Строка) тип Число Объявление внутренних переменных Код функции Возврат ВозвращаемоеЗначение // типа Число КонецФункции
Пример Функции
Функция фКоличествоЭмитентов(ДоходностьБезРиска тип Число, Доходность_С_Риском тип Число, цДопустимоеКоличествоДефолтов тип Число) тип Число КоличествоЭмитентов = 100/ ((Доходность_С_Риском - ДоходностьБезРиска)/цДопустимоеКоличествоДефолтов) Возврат КоличествоЭмитентов КонецФункции
Передача данных
- в VB в функцию передавались значения как ByValue и ByRef - если значения передавались как ByRef то внутри функции можно было менять внешние переменные , как в перфоленте отдавать вычисленные значения наружу функции только через Функции и кортежи ?
- Точно также как в VB... ByVal = Знач, а ByRef = Ссыл... , по умолчанию используется Знач, в отличие от 1С, где по умолчанию по ссылке параметры передаются... долго думал, сделать как в 1С или как в .Net и принял решение, что раз Перфолента основана на нет, то пусть будет как в Net... хотя это одно из критических изменений с точки зрения совместимости с 1С...
Формат
Функция фИмяФункции ([Знач] Поле1 тип Число, Ссыл Поле2 тип Строка) тип Число Объявление внутренних переменных Код функции Возврат ВозвращаемоеЗначение // типа Число КонецФункции
Знач - можно не писать т.к. оно используется по умолчанию
Формат Процедуры
Процедура отличается от функции тем что не возвращает значение.
Процедура фИмяПроцедуры(Поле1 тип Число, Поле2 тип Строка)
КонецФункции
Пример Процедуры
//--Пример процедуры Процедура РазложениеНаМножители(цИсходноеЧисло тип Целое) ТекщийДелитель=2 //текущий делитель - Внутренняя переменная Пока цИсходноеЧисло <> 1 Если цИсходноеЧисло % ТекщийДелитель = 0 ВыводСтроки ТекщийДелитель цИсходноеЧисло/=ТекщийДелитель //целочисленное деление Иначе ТекщийДелитель++ КонецЕсли КонецЦикла КонецПроцедуры
Возможные ошибки
Каждую переменную (пока) надо объявлять отдельно.
- НЕПРАВИЛЬНОЕ объявление Полей функции
Функция фИмяФункции( Поле1, Поле2 тип Число, Поле3 тип Строка) тип Число
- ПРАВИЛЬНОЕ объявление переменных функции
Функция фИмяФункции( Поле1 тип Число, Поле2 тип Число, Поле3 тип Строка) тип Число
Пример объявления и использования функций и процедур
#ТипСборки КонсольноеПриложение #ИспользоватьСтандартнуюБиблиотеку ИмпортИмён Промкод.Перфолента.Консоль //пример использования Функций и Процедур Программа Облигации //-- Процедура Старт // основная процедура, точка начала программы // Как рассчитать ROE - Возврат на инвестиции - ВозвратИнвестиций // Собственный капитал (equity) = активы (assets) — обязательства (Долги liabilities) // ROE (return on equity) = прибыль (net income)/собственный капитал (equity) // По сути, ВозвратИнвестиций — это та процентная ставка, под которую в компании работают средства акционеров. // Этот показатель является ключевым для определения эффективности деятельности компании. #Область "Расчёт Возврата инвестиций (ROE)" Перем ВозвратИнвестиций, ПрибыльПослеНалогов, Активы, Долги тип Число // обьявление переменных // инициализация переменных ПрибыльПослеНалогов = 100 Активы = 200 Долги = 600 // пример простых вычислений ВозвратИнвестиций = ПрибыльПослеНалогов/(Активы - Долги) // или для акций // ВозратИнвестицийАкции = ДивидендыПослеНалогов/ЦенаПокупкиАкции // 1) есть операторы ВыводСтроки и ВводСтроки (редактор их красным цветом показывает) // после которых не надо круглые скобки ставить. // А есть методы объекта Консоль Вывод и ВыводПС после которых надо круглые скобочки ставить // т.к. это вызов метода, а не оператор... // 2) в стандартной библиотеке уже есть функции для вычисления факториала: // Математика.ФакториалЧ и Математика.ФакториалБЦ... посмотрите в синтакс помощнике объект математика, // там очень много математических функций... // объект Математика можно импортировать, что бы каждый раз это слово не писать... // ИмпортИмён Промкод.Перфолента.Математика ВыводСтроки "Возврат Инвестиций = "+ВозвратИнвестиций #КонецОбласти // 1) разложение целого числа на простые множители РазложениеНаМножители(232) // использование Факториал ЗначениеФакториал = фВычислитьФакториал(15) ВыводСтроки "Факториа 15 = " + ЗначениеФакториал // или так без перевода строки Вывод( "Факториа 15 = " + ЗначениеФакториал) // проверка Функции КоличествоЭмитентов // Несколько переменных, вывод прямо в ВыводСтроки без промежуточных переменных ВыводСтроки "Число Эмитентов = " + фКоличествоЭмитентов(6,10,2) // доходность 6% без риска, 10% с риском дефолта 2х эмитентов Пауза КонецПроцедуры #Область "Примеры Процедуры и Функции" //--Пример процедуры Процедура РазложениеНаМножители(цИсходноеЧисло тип Целое) ТекщийДелитель=2 //текущий делитель - Внутренняя переменная Пока цИсходноеЧисло <> 1 Если цИсходноеЧисло % ТекщийДелитель = 0 ВыводСтроки ТекщийДелитель цИсходноеЧисло/=ТекщийДелитель //целочисленное деление Иначе ТекщийДелитель++ КонецЕсли КонецЦикла КонецПроцедуры // Функция вычисления факториала // название функции фВычислитьФакториал – префикс ф –для удобства чтобы сразу было видно что это функция Функция фВычислитьФакториал(цЧисло тип Целое) тип Число Перем Факториал тип Число = 1 // Факториал - внутренняя переменная Для цИндекс тип Целое = 2 По цЧисло // ц – префикс целого числа Факториал = Факториал * цИндекс // или сокращённая запись Факториал *= Инд КонецЦикла Возврат Факториал КонецФункции #КонецОбласти #Область "Финансы" // НЕПРАВИЛЬНОЕ объявление переменных функции // Функция фКоличествоЭмитентов(ДоходностьБезРиска, Доходность_С_Риском тип Число, цДопустимоеКоличествоДефолтов тип Число) тип Число // ПРАВИЛЬНОЕ объявление переменных функции // Вычисление степени диверсификации эмитентов в зависимости // от доходности с риском и без риска и допустимого количекства дефолтов Функция фКоличествоЭмитентов(ДоходностьБезРиска тип Число, Доходность_С_Риском тип Число, цДопустимоеКоличествоДефолтов тип Число) тип Число КоличествоЭмитентов = 100/ ((Доходность_С_Риском - ДоходностьБезРиска)/цДопустимоеКоличествоДефолтов) Возврат КоличествоЭмитентов КонецФункции #КонецОбласти КонецПрограммы