Функции и процедуры в языке Перфолента.NET — различия между версиями

Материал из ТХАБ.РФ
Перейти к: навигация, поиск
м (Формат)
(Ссылки)
 
(не показано 8 промежуточных версий 3 участников)
Строка 1: Строка 1:
 
{{Описание языка Перфолента.NET-Содержание}}
 
{{Описание языка Перфолента.NET-Содержание}}
 +
 
== Вопросы ==
 
== Вопросы ==
  
Строка 5: Строка 6:
 
   
 
   
 
  Возврат Значение1 и Значение2
 
  Возврат Значение1 и Значение2
   
+
 
 +
* при необходимости вернуть из функции несколько значений можно использовать [[кортеж]]:
 +
  Возврат $(А,Б,С)
 +
 
 +
посмотрите в примере [[кортеж]]и...
 +
 
 
== Формат ==
 
== Формат ==
 +
Функциям и процедурам в качестве параметров передаются Поля, переменные используются только внутри Процедур и функций и их время жизни равно времени исполнения Процедуры/Функции.
 +
  
  '''Функция''' фИмяФункции (Переменная1 тип Число, Переменная2 тип Строка) тип Число  
+
  '''Функция''' фИмяФункции (Поле1 тип Число, Поле2 тип Строка) тип Число  
Объявление внутренних переменных
+
        Объявление внутренних переменных
Код функции
+
        Код функции
'''Возврат''' ВозвращаемоеЗначение // типа Число
+
        '''Возврат''' ВозвращаемоеЗначение // типа Число
 
  '''КонецФункции'''
 
  '''КонецФункции'''
  
Строка 22: Строка 30:
  
 
=== Передача  данных  ===
 
=== Передача  данных  ===
* в VB в функцию передавались значения как ByValue и ByRef -если  значения передавались ка ByRef то внутри функции можно было менять внешние переменные , как в перфоленте отдавать вычисленные значения наружу функции только через Функции и кортежи  ?
+
* в VB в функцию передавались значения как ByValue и ByRef - если  значения передавались как ByRef то внутри функции можно было менять внешние переменные , как в перфоленте отдавать вычисленные значения наружу функции только через Функции и кортежи  ?
  
** Точно также как в VB... ByVal = Знач, а ByRef = Ссыл...
+
** Точно также как в VB... ByVal = Знач, а ByRef = Ссыл... , по умолчанию используется Знач, в отличие от 1С, где по умолчанию по ссылке параметры передаются... долго думал, сделать как в 1С или как в .Net и принял решение, что раз Перфолента основана на нет, то пусть будет как в Net... хотя это одно из критических изменений с точки зрения совместимости с 1С...
  
 
==== Формат ====
 
==== Формат ====
  
  '''Функция''' фИмяФункции (Занч Переменная1 тип Число, Ссыл Переменная2 тип Строка) тип Число  
+
  '''Функция''' фИмяФункции ([Знач] Поле1 тип Число, Ссыл Поле2 тип Строка) тип Число  
Объявление внутренних переменных
+
              Объявление внутренних переменных
Код функции
+
              Код функции
'''Возврат''' ВозвращаемоеЗначение // типа Число
+
              '''Возврат''' ВозвращаемоеЗначение // типа Число
 
  '''КонецФункции'''
 
  '''КонецФункции'''
 +
 +
'''Знач''' - можно не писать т.к. оно используется по умолчанию
  
 
== Формат Процедуры ==  
 
== Формат Процедуры ==  
процедура отличается от функции тем что не возвращает значение
 
  
  '''Процедура''' фИмяПроцедуры(Переменная1 тип Число, Переменная2 тип Строка)
+
Процедура отличается от функции тем что не возвращает значение.
 +
 
 +
  '''Процедура''' фИмяПроцедуры(Поле1 тип Число, Поле2 тип Строка)
  
 
  '''КонецФункции'''
 
  '''КонецФункции'''
 +
 
=== Пример Процедуры ===
 
=== Пример Процедуры ===
  
Строка 57: Строка 69:
  
 
=== Возможные ошибки ===
 
=== Возможные ошибки ===
 +
 
Каждую переменную (пока) надо объявлять отдельно.
 
Каждую переменную (пока) надо объявлять отдельно.
  
*НЕПРАВИЛЬНОЕ объявление переменных функции   
+
*НЕПРАВИЛЬНОЕ объявление Полей функции   
 
   
 
   
  Функция фИмяФункции(Переменная1, Переменная2 тип Число, Переменная3 тип Строка) тип Число  
+
  Функция фИмяФункции( Поле1, Поле2 тип Число, Поле3 тип Строка) тип Число  
 
    
 
    
 
* ПРАВИЛЬНОЕ объявление переменных функции
 
* ПРАВИЛЬНОЕ объявление переменных функции
 
    
 
    
  Функция фИмяФункции(Переменная1 тип Число, Переменная2 тип Число, Переменная3 тип Строка) тип Число
+
  Функция фИмяФункции( Поле1 тип Число, Поле2 тип Число, Поле3 тип Строка) тип Число
  
 
== Пример объявления и использования функций и процедур  ==
 
== Пример объявления и использования функций и процедур  ==
Строка 72: Строка 85:
 
  #ИспользоватьСтандартнуюБиблиотеку
 
  #ИспользоватьСтандартнуюБиблиотеку
 
  ИмпортИмён Промкод.Перфолента.Консоль
 
  ИмпортИмён Промкод.Перфолента.Консоль
  //пример использования Фуниций и процедур
+
  //пример использования Функций и Процедур
 
  Программа Облигации
 
  Программа Облигации
 
     //--
 
     //--
 
     Процедура Старт // основная процедура, точка начала программы
 
     Процедура Старт // основная процедура, точка начала программы
         // Как  расчитать ROE - Возврат на инвестиции - ВозвратИнвестиций
+
         // Как  рассчитать ROE - Возврат на инвестиции - ВозвратИнвестиций
 
         // Собственный капитал (equity) = активы (assets) — обязательства (Долги liabilities)
 
         // Собственный капитал (equity) = активы (assets) — обязательства (Долги liabilities)
 
         // ROE (return on equity) = прибыль (net income)/собственный капитал (equity)
 
         // ROE (return on equity) = прибыль (net income)/собственный капитал (equity)
Строка 164: Строка 177:
 
     #КонецОбласти
 
     #КонецОбласти
 
  КонецПрограммы     
 
  КонецПрограммы     
 
 
  
 
== Ссылки ==
 
== Ссылки ==
* [http://promcod.com.ua/cat.asp?cat=perfolenta-programmig-language ПРОМОКОД - официальная страница языка программирования Перфолента.NET]
+
* [http://perfolenta.net Официальная страница языка программирования Перфолента.NET]
  
 
[[Категория:Описание языка Перфолента.NET]]
 
[[Категория:Описание языка Перфолента.NET]]

Текущая версия на 17:17, 12 августа 2024

'Показать Содержание Описание языка Перфолента.NET'

Синтаксис языка Перфолента

2.1 Переменные. Объявление переменных, инициализация и их использование

2.2 Типы данных в языке Перфолента

2.3 Массивы. Создание массивов, заполнение данными, обращения к элементам и другие операции с массивами

2.4 Структура программы на языке Перфолента.Net

2.5 Условный оператор Если

2.6 Циклы в языке Перфолента

2.7 Оператор условного выбора блока кода Выбор Для

2.8 Функции и процедуры в языке Перфолента

2.9 Оператор Попытка. Структурная обработка ошибок

2.10 Работа с файлами

2.11 Директивы препроцессора. Выполнение действий перед компиляцией

Практика программирования на языке Перфолента

3.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/ ((Доходность_С_Риском - ДоходностьБезРиска)/цДопустимоеКоличествоДефолтов)
       
       Возврат КоличествоЭмитентов
   КонецФункции
   
   #КонецОбласти
КонецПрограммы    

Ссылки