Нищо чудно, че нарекох тази статия „Функциите като неразделна част от програмирането“, защото без тях, според мен, нито един език няма право да съществува. Какво е? Функцията е основният градивен елемент на една добре написана програма. Това не само улеснява четенето на кода, но и коренно променя идеята за структурирано програмиране. С помощта на функции можете да използвате повторно отделни части от програмата, като им подадете всякакви параметри. Нито една сериозна програма не може да се представи без това чудо на програмния елемент.

Ще ви кажа накратко как работи. Функцията е блок от инструкции, които вашата програма може да извика. При достъп до заглавката на този блок (име на функция), той се изпълнява и изпълнява някои действия, зададени от програмиста. След това този блок връща получената стойност и я предава на основната програма. Нека обясня на практика.

Грубо казано, всичко изглежда така. Ще обясня накратко. Създаваме някаква променлива и й присвояваме резултата от изпълнението на функцията myfunc, която от своя страна изчислява стойността на повдигане на квадрат на някакво число. Функциите не се изпълняват веднага по време на стартиране на програмата, а само когато бъдат извикани. Може би малко объркващо, но това е положението.

Как се извиква функция?

За да извикате функция, трябва да я създадете. Въпреки че има и вградени функции. Например това: cos, sin, md5, count, absи така нататък. За да ги извикате, трябва само да присвоите желаната стойност на променливата.

Аргументът на функцията е стойността, която предавате към нея, когато я извиквате. Аргументите на функцията са поставени в скоби. Когато създавате функция, вие задавате условните имена на аргументите. Тогава тези имена могат да се използват в тялото на функцията като локални променливи. Нека се върнем към функциите, които потребителят създава сам. Това става много лесно. Първо се създава тялото на функцията:

Функция hello() ( echo "Здравей, свят!"; )

Тогава го наричаме. И ако няма параметри, тогава просто поставяме скоби. За да извикаме тази функция, използваме само реда: Здравейте();. Всяка функция може също да върне стойност, използвайки запазена дума връщане. Този оператор прекратява изпълнението на функцията и изпраща върнатата стойност към извикващата програма. функция sum($first, $second) ($r=$first + $second; return $r;) echo sum(2,5); резултатът от изпълнението на програмата ще бъде равен на 7. Локални и глобални променливи

Както във всеки друг език за програмиране, има променливи, които са налични само във функцията и променливи, които са налични в кода на самата програма. Такива променливи се наричат ​​съответно локални и глобални. Вътре във функция не можете просто да получите достъп до променлива, която е създадена извън тази функция. Ако се опитате да направите това, ще създадете нова променлива със същото име, но локална за функцията.

$per="Дима"; функция primer() // Do: извеждане на локална променлива ( echo "Казвам се ".$per; ) echo primer();

В този случай на екрана ще се появи фразата „Казвам се“. Това означава, че във функцията primer е създадена променливата $per и по подразбиране е присвоена нулева стойност. За да избегнете подобни задръствания, трябва да използвате оператора глобален. Нека коригираме съответно горния код:

$per="Дима"; функция primer() // Изпълнява: глобален изход на променлива ( global $per; echo "Казвам се ".$per; ) echo primer();

Вече всичко трябва да е наред - проблемът е разрешен. Само не забравяйте, че ако функцията промени стойността на външна променлива, тогава такава промяна ще засегне цялата програма, така че трябва да използвате този оператор внимателно!

Функции с два или повече аргумента

Някои от аргументите, предавани на функция, могат да бъдат направени незадължителни, което прави функцията по-малко взискателна. Следният пример показва това ясно:

... function font($text, $size=5) // Do: размер на изходния шрифт ( echo " ".$текст.""; ) font("Здравейте
",1); font("Здравейте
",2); font("Здравейте
",3); font("Здравейте
",4); font("Здравейте
",5); font("Здравейте
",6); font("Здравейте
");

По подразбиране размерът на шрифта е 5. Ако пропуснем втория параметър на функцията, тогава той ще бъде равен на тази стойност.

Заключение

Преди да се сбогувам, искам да ви обърна внимание на един съвет. Състои се в поставяне на всички функции, които сте написали, в един файл (например function.php). И тогава, във файла, където трябва да извикате функцията, просто трябва да включите function.php и всичко ще бъде готово за използване. Това ще направи много по-лесно разбирането на логиката във вашата програма. За да се свържете, използвайте:

include_once("функция.php");

require_once("function.php");

Ако разбирате същността на въпроса, разглеждан в тази статия, тогава съм сигурен, че можете лесно да използвате функциите във вашите програми. Още веднъж, това е, за да ги направи по-редактируеми и многократно използвани.

Функции над числа.Езикът VB има следните математически функции: коремни мускули(х) - модулно изчисление; кв(х) - изчисляване на корен квадратен, аtn(х) - изчисляване на аркутангенса; cos(х) - изчисляване на косинус; грях(х) - изчисляване на синуса; тен(х) - изчисляване на тангенс; дневник(х) - изчисляване на натурален логаритъм, експ(х) - изчисляване на експонента, където х- аргумент на функцията от числен тип. За да се изчислят стойностите на функциите, които липсват в езика VisualBasic, е необходимо да се използват формули, известни от математиката.

Изразяване г= във VB ще бъде записано така: y=sin(x^2)+sqr(tan(x))*(x+5) ^ (1/5).

Аргументът на функцията трябва да бъде написан в скоби.

Функции за преобразуване на стойност от един тип в друг.Езикът за програмиране VB предоставя функции за промяна на типа данни на стойност. Например, има променлива a от тип Double и променлива s от тип String.

За да запишете променлива a в променлива s, е необходимо да извършите преобразуване на тип S=CStr(a) и да запишете променлива s в променлива a–a=CDbl(s).

VB функции за преобразуване на тип стойност:

CStr - конвертиране в низ;

CByte - преобразуване в Byte;

CInt - преобразуване в Integer;

CLng - преобразуване в Long;

CSng - преобразуване в Single;

CDbl - конвертиране в Double.

2.6. Представяне на различни видове данни в компютърната памет

За представяне на информация в компютърната памет (както числова, така и нечислова) се използва метод на двоично кодиране.

Елементарната клетка на компютърната памет е с дължина 8 бита (байта). Всеки байт има свой номер (нарича се адрес). Най-голямата последователност от битове, които компютърът може да обработи като цяло, се нарича машинна дума. Дължината на машинната дума зависи от дължината на думата на процесора и може да бъде 16, 32, 64 бита и т.н.

Кодиране на знаци. Един байт е достатъчен за кодиране на знаци. В този случай могат да бъдат представени 256 знака (с десетични кодовеот 0 до 255). Наборът от символи на персонални компютри, съвместими с IBM PC, най-често е разширение на ASCII кода (American Standard Code for Information Interchange - стандартният американски код за обмен на информация). В момента се използват и двубайтови представяния на символи.

Представяне на цели числа в допълнение от две.Диапазонът от стойности зависи от броя на битовете памет, разпределени за тяхното съхранение. n-битова памет може да съхранява различни стойности , Например стойностите от тип Integer са в диапазона от -32768 (-2 15) до 32767 (2 15 - 1) и 2 байта (16 бита) са разпределени за тяхното съхранение; от тип Long - в диапазона от -2 31 до 2 31 - 1 и са разположени в 4 байта (32 бита).

За представяне без знак на цели двоични числа варират от 0 до
, а в подписано представителство - от
преди
. В съвременните компютри е обичайно да се избира дължината n на битовата мрежа от цели числа като кратно на 8 (т.е. цяло число байтове).

В случай на представяне на количество със знак, най-лявата (най-високата) цифра показва положително число, ако съдържа нула, и отрицателно, ако съдържа единица.

Цифрите са номерирани отдясно наляво, започвайки от 0. На фиг. .2.2 показва номерирането на битовете в двубайтова машинна дума.

Ориз. 2.2. збитово мащабиране в двубайтова машинна дума

Допълнителен кодположителното число е същото като неговото директен код. Директният код на цяло число може да се получи, както следва: числото се превежда в двоична системаизчисление и след това неговата двоична нотация отляво се допълва с толкова незначещи нули, колкото се изисква от типа данни, към който принадлежи числото.

Например, ако числото 37 (10) = 100101 (2) е декларирано като целочислена стойност (шестнадесет-битов знак), тогава неговият директен код ще бъде 0000000000100101, а ако е дълга стойност (тридесет и два бита със знак ), тогава неговият директен код ще бъде. За по-компактна нотация по-често се използва шестнадесетичното представяне на кода. Получените кодове могат да бъдат пренаписани съответно като 0025 (16) и 00000025 (16).

Допълнителният код на отрицателно цяло число може да бъде получен чрез следния алгоритъм:

    запишете директния код на модула на числото;

    инвертирайте го (заменете единици с нули, нули с единици);

    добавете единица към обратния код.

Например, нека напишем кода за допълване на двата от -37, интерпретирайки го като дълга (32-битов знак) стойност:

    директният код за числото 37 е ;

    обратен код;

    допълнителен код или FFFFFFDB (16) .

При получаване на число чрез неговия допълнителен код, на първо място, е необходимо да се определи неговия знак. Ако числото се окаже положително, просто преведете кода му в десетична бройна система. В случай на отрицателно число трябва да се изпълни следният алгоритъм:

    извадете числото 1 от кода;

    инвертиран код;

    Преведи на десетична системаразчитане. Запишете полученото число със знак минус.

Примери.Нека запишем числата, съответстващи на допълнителните кодове:

    0000000000010111. Тъй като нулата е записана в най-значимия бит, резултатът ще бъде положителен. Това е кодът на числото 23.

    1111111111000000. Тук е записан кодът на отрицателно число. Изпълняваме алгоритъма: 1) 1111111111000000 (2) - 1 (2) = 1111111110111111 (2) ; 2) 0000000001000000; 3) 1000000 (2) = 64 (10) . Отговор: -64.

Обективен: 1) изучаване на правилата за описание на функциите; 2) придобиват умения за използване на функции при писане на програми на C++.

Теоретична информация

Основната програмна единица на езика C++ е функция.

функция- логически завършен, по определен начин проектиран фрагмент от програма, която има име. Функциите ви позволяват да разделяте големи изчислителни задачи на по-малки.

Всяка C++ програма задължително съдържа функция, наречена main, която е тялото на програмата. За всички други функции, ако присъстват в програмата, трябва да се декларират прототипи - схематични представяния, които казват на компилатора името и формата на всяка функция в програмата.

Синтаксис за прототип на функция с параметри:

return_value_type име_на_функция (списък_на_параметри_с_индикация_на_типове);

Функциите в C++ са стандартни (библиотечни) и програмируеми от потребителя.

Стандартни функции

Описанията на стандартните функции се намират във файловете, включени в програмата с помощта на директивата #include. Такива файлове се наричат ​​заглавни; те имат разширение h.

Позоваването на име на функция в основната програма се нарича извикване на функция.

Извикването на функции води до извършване на някои действия или изчисляване на някаква стойност, която след това се използва в програмата.

y=sin(x); // функция за изчисляване на синус

Дефиниция на функцията

Най-общо функциите се дефинират, както следва:

return_value_type име_на_функция (тип име_параметър,...,тип име_параметър)

тяло_на_функция

Програмируеми функции

Функциите, които програмистът създава сам, опростяват процеса на писане на програми, защото те:

    помагат да се избегне повторното програмиране, тъй като една и съща функция може да се използва в различни програми;

    увеличаване на нивото на модулност на програмата, следователно е по-лесно да се четат, променят и коригират грешки.

Пример9 .1. Нека създадем функция, която отпечатва 65 знака "*" подред. За да работи тази функция в някакъв контекст, тя е включена в програмата за печат на бланки. Програмата се състои от функции: main() и stars().

// бланка

#включи

const int Limit=65;

празни звезди (празни); // прототип на функция stars().

cout<<"Moscow Institute of Electronic Engineering"<

// Дефиниране на функцията stars().

за (брой=1; брой<=Limit; count++)

Разгледахме пример за проста функция, която няма аргументи и не връща никакви стойности.

Функционални параметри

Разгледайте използването на функционални параметри като пример.

Пример9. 2. Нека напишем функцията space(), чийто аргумент ще бъде броят интервали, които тази функция трябва да отпечата.

#define адрес " Зеленоград"

#define name "Московски институт по електронно инженерство"

#define катедра "Информатика и програмиране"

const int LIMIT=65;

#включи

празно място (вътрешно число);

cout<

интервали=(LIMIT - strlen(име))/2; // Изчислете колко

// трябват интервали

cout<

интервал((LIMIT - strlen(отдел))/2); // аргументът е израз

cout<

// Дефиниция на функцията stars().

за (брой=1; брой<=LIMIT; count++)

// Дефиниция на функцията space().

празно място (цяло число)

за (брой=1; брой<=number; count++)

Променливата номер се нарича формален аргумент. Тази променлива приема стойностите на действителния аргумент, когато функцията се извика. С други думи, формален аргументе променлива в дефиницията на извиканата подпрограма и действителен аргумент- специфичната стойност, присвоена на тази променлива от извикващата програма.

Ако е необходим повече от един аргумент за комуникация с определена функция, тогава заедно с името на функцията можете да посочите разделен със запетаи списък с аргументи:

void printnum (int i, int j)

( cout<<"Координаты точек”<< i << j <

Входната стойност на функцията може да бъде обработена поради наличието аргумент; изходната стойност се връща с помощта на ключовата дума return.

Отделна система (подсистема, подпрограма), която получава контролни входове под формата на стойности на аргументи. На изхода функцията връща резултат, който може да бъде или скаларна стойност, или векторна стойност (структура, индексен масив и т.н.). По време на изпълнение на функцията могат да бъдат направени и промени в управляваната система, както обратими, така и необратими.

Страничен ефект

Функции и процедури

В някои езици за програмиране (например в Pascal) функциите и процедурите (подпрограми, които не връщат стойности) са ясно разграничени от синтаксиса на езика. В други - например в езика C - процедурите са специален случай (подмножество) от функции, които връщат стойност от тип (псевдотип) void - празна стойност.

Аргументи и опции

Когато се извика функция, към нея се предават аргументи. Ако аргументът е препратка към област от паметта (променлива, указател или препратка), тогава функцията, в зависимост от типа на нейния параметър, може или да използва своята стойност (например да създаде променлива, да копира стойността на аргумента там), или самия аргумент (създайте препратка към областта, към която паметта се позовава от аргумента).

Функция без аргументи

Такава функция не изисква никакви аргументи.

Вижте също

Връзки

  • PHP функции. Синтаксис и примери за използване на PHP функции

Фондация Уикимедия. 2010 г.

Вижте какво е "Функция (програмиране)" в други речници:

    Уикиречникът има статията „функция“ Функцията е многозначителен термин, който означава връзка между елементи, в която промяната в един води до промяна ... Wikipedia

    Функция-заглушка в програмирането е функция, която не извършва никакво смислено действие, връща празен резултат или въвежда непроменени данни. Еквивалентната английска дума е stub. Използва се: За яснота, когато ... ... Wikipedia

    висша психическа функция: възстановяване- (възстановяване на висши психични функции) раздел на невропсихологията, посветен на изучаването на механизмите и методите за възстановяване на функциите на висшите психични функции, нарушени поради лезии на локалния мозък на мозъка. Въз основа на идеи за... Голяма психологическа енциклопедия

    Математическото програмиране е математическа дисциплина, която изучава теорията и методите за решаване на проблеми за намиране на екстремуми на функции върху множества от крайномерно векторно пространство, определено от линейни и нелинейни ограничения ... ... Wikipedia

    В областта на компютъризацията концепцията за програмиране на мрежови задачи или иначе наречено мрежово програмиране е доста подобна на концепциите за програмиране на сокет и програмиране клиент-сървър, ... ... Wikipedia

    Функция от по-висок ред е функция, която приема други функции като аргументи или връща друга функция като резултат. Основната идея е, че функциите имат същия статус като другите обекти с данни. ... ... Wikipedia

    ПРОГРАМИРАНЕ МАТЕМАТИЧЕСКО- сложни математически. модели и методи за решаване на задачи за намиране на екстремума (максимум или минимум) на функции на няколко променливи при ограничения под формата на неравенства. Това означава, че променливите характеризират някои аспекти на механизма ... ... Руска социологическа енциклопедия

    Математическа дисциплина, която изучава математиката. абстракции на програми, третирани като обекти, изразени на формален език, с определена информация и логика. структура и подлежи на изпълнение на автомат. устройства. П. т. ...... Математическа енциклопедия

    Функцията в програмирането е вид подпрограма. Характеристиката, която я отличава от друг вид процедурни подпрограми е, че функцията връща стойност и нейното извикване може да се използва в програмата като израз. От гледна точка на ... ... Wikipedia

    ПРОГРАМИРАНЕ, МАТЕМАТИКА- клон на приложната математика, използван като метод в икономическите изследвания. Развива теорията и методите за решаване на условни екстремални проблеми, е основната част от формалния апарат за анализ на различни проблеми с управлението ... Голям икономически речник

Ако сте разработчик като мен, вероятно първо сте научили ООП парадигмата. Вашият първи език беше Java или C++ - или, ако имате късмет, Ruby, Python или C# - така че вероятно знаете какво представляват класове, обекти, екземпляри и т.н. Това, което определено не разбирате, са основите на онази странна парадигма, наречена функционално програмиране, която се различава значително не само от ООП, но и от процедурното, ориентираното към прототипи и други видове програмиране.

Функционалното програмиране става популярно – и има защо. Самата парадигма не е нова: Haskell е може би най-функционалният език и произхожда от 90-те години. Езици като Erlang, Scala, Clojure също попадат в определението за функционални. Едно от основните предимства на функционалното програмиране е възможността да пишете програми, които работят едновременно (ако вече сте забравили какво е - опреснете паметта си, като прочетете) и без грешки - тоест блокиранията и безопасността на нишките няма да ви притесняват.

Функционалното програмиране има много предимства, но възможното максимално използване на ресурсите на процесора поради конкурентно поведение е основното му предимство. По-долу ще разгледаме основните принципи на функционалното програмиране.

Въведение: Всички тези принципи не са задължителни (много езици не ги следват напълно). Всички те са теоретични и са необходими за най-точното дефиниране на функционалната парадигма.

1. Всички функции са чисти

Това правило със сигурност е основното във функционалното програмиране. Всички функции са чисти, ако отговарят на две условия:

  1. Функция, извикана с едни и същи аргументи, винаги връща същата стойност.
  2. Няма странични ефекти по време на изпълнение на функцията.

Първото правило е ясно - ако извикам функцията sum(2, 3), очаквам резултатът винаги да е 5. Веднага след като извикате функцията rand() или получите достъп до променлива, която не е дефинирана във функцията, чистотата на функцията е нарушена и това не е позволено във функционалното програмиране.

Второто правило - без странични ефекти - е по-широко по своята същност. Страничен ефект е промяна към нещо различно от функцията, която се изпълнява в момента. Промяна на променлива извън функцията, писане в конзолата, хвърляне на изключение, четене на данни от файл са примери за странични ефекти, които отнемат от чистотата на функция. Това може да изглежда като сериозно ограничение, но помислете отново. Ако сте сигурни, че извикването на функция няма да промени нищо „отвън“, тогава можете да използвате тази функция във всеки сценарий. Това проправя пътя за конкурентно програмиране и многонишкови приложения.

2. Всички функции са първокласни и по-високи

Тази концепция не е характеристика на FP (използва се в Javascript, PHP и други езици), но е изискване. Всъщност Wikipedia има цяла статия, посветена на първокласни функции. За да бъде функция от първи клас, тя трябва да може да бъде декларирана като променлива. Това позволява функцията да бъде манипулирана като нормален тип данни и все пак да бъде изпълнена.

3. Променливите са неизменни

Тук всичко е просто. Във функционалното програмиране не можете да промените променлива, след като е била инициализирана. Можете да създавате нови, но не можете да променяте съществуващите - и благодарение на това можете да сте сигурни, че нито една променлива няма да се промени.

4. Относителна прозрачност на функциите

Трудно е да се даде правилна дефиниция на относителната прозрачност. Мисля, че най-точното е следното: ако можете да замените извикване на функция с върната стойност и състоянието не се променя, тогава функцията е относително прозрачна. Това може да е очевидно, но ще дам пример.

Да кажем, че имаме Java функция, която добавя 3 и 5:

Public int addNumbers()( return 3 + 5; ) addNumbers() // 8 8 // 8

Очевидно всяко извикване на тази функция може да бъде заменено с 8, което означава, че функцията е относително прозрачна. Ето пример за непрозрачна функция:

Public void printText()( System.out.println("Hello World"); ) printText() // Не връща нищо, но отпечатва "Hello World"

Тази функция не връща нищо, но отпечатва текст и ако извикването на функцията бъде заменено с нищо, състоянието на конзолата ще бъде различно - което означава, че функцията не е относително прозрачна.

5. Функционалното програмиране се базира на ламбда смятане

Функционалното програмиране разчита до голяма степен на математическа система, наречена ламбда смятане. Не съм математик, така че няма да навлизам в подробности - но искам да посоча два ключови принципа на ламбда смятането, които формират самата концепция на функционалното програмиране:

  1. В ламбда смятането всички функции могат да бъдат анонимни, тъй като единствената значима част от заглавната част на функцията е списъкът с аргументи.
  2. При извикване всички функции преминават през процес на къри. То е следното: ако една функция се извика с няколко аргумента, то първо тя ще се изпълни само с първия аргумент и ще върне нова функция с 1 аргумент по-малко, която веднага ще бъде извикана. Този процес е рекурсивен и продължава, докато не бъдат приложени всички аргументи, връщайки крайния резултат. Тъй като функциите са чисти, това работи.

Както казах, ламбда смятането не свършва дотук - но ние покрихме само ключовите аспекти, свързани с FP. Сега, в разговор за функционално програмиране, можете да пуснете думата „ламбда смятане“ и всички ще си помислят, че бъркате 🙂

Заключение

Функционалното програмиране е истинско натоварване на мозъка - но това е много мощен подход и вярвам, че популярността му тепърва ще расте.

Ако искате да научите повече за функционалното програмиране, тогава ви съветваме да разгледате примерите за използване на принципите на FP в JavaScript ( , ), както и този, посветен на функционалния C#.