Bu makaleye “Programlamanın ayrılmaz bir parçası olarak işlevler” adını verdiğime şaşmamalı, çünkü onlarsız, bence hiçbir dilin var olma hakkı yoktur. Bu ne? İşlev, iyi yazılmış bir programın ana yapı taşıdır. Sadece kodu okumayı kolaylaştırmakla kalmaz, aynı zamanda fikrini kökten değiştirir. yapılandırılmış programlama. Fonksiyonların yardımıyla, programın tek tek parçalarını, bunlara herhangi bir parametre ileterek yeniden kullanabilirsiniz. Programlama öğesinin bu mucizesi olmadan ciddi bir program hayal edilemez.

Nasıl çalıştığını kısaca anlatacağım. Fonksiyon, programınızın çağırabileceği bir talimat bloğudur. Bu bloğun başlığına (işlev adı) erişildiğinde, yürütülür ve programcı tarafından belirtilen bazı eylemleri gerçekleştirir. Bundan sonra, bu blok alınan değeri döndürür ve ana programa iletir. Pratikte anlatayım.

Kabaca konuşursak, her şey böyle görünüyor. kısaca anlatacağım. Bir değişken yaratıyoruz ve ona myfunc işlevini yürütmenin sonucunu atadık, bu da bir sayının karesini almanın değerini hesaplar. Fonksiyonlar, program başlangıcında hemen değil, sadece çağrıldıklarında yürütülür. Belki biraz kafa karıştırıcı, ama böyle.

Bir fonksiyon nasıl çağırılır?

Bir işlevi çağırmak için onu oluşturmanız gerekir. Yerleşik işlevler olmasına rağmen. Örneğin, bu: çünkü, günah, md5, saymak, abs ve benzeri. Bunları çağırmak için değişkene istediğiniz değeri atamanız yeterlidir.

Bir işlev argümanı, onu çağırdığınızda ona ilettiğiniz değerdir. İşlev bağımsız değişkenleri parantez içine alınır. Bir işlev oluşturduğunuzda, bağımsız değişkenlerin koşullu adlarını belirtirsiniz. Daha sonra bu isimler fonksiyon gövdesinde yerel değişkenler olarak kullanılabilir. Kullanıcının kendi oluşturduğu fonksiyonlara dönelim. Bu çok kolay yapılır. İlk olarak, işlevin gövdesi oluşturulur:

merhaba() işlevi ( echo "Merhaba dünya!"; )

Sonra diyoruz. Parametresi yoksa, parantez koyarız. Bu işlevi çağırmak için yalnızca şu satırı kullanırız: merhaba();. Herhangi bir işlev ayrıca kullanarak bir değer döndürebilir ayrılmış kelime dönüş. Bu ifade, işlevin yürütülmesini sonlandırır ve dönüş değerini çağıran programa gönderir. function toplam($ilk, $saniye) ($r=$ilk + $saniye; dönüş $r;) echo toplam(2,5); program yürütmenin sonucu 7'ye eşit olacaktır. Yerel ve global değişkenler

Diğer herhangi bir programlama dilinde olduğu gibi, sadece fonksiyonun içinde bulunan değişkenler ve programın kendi kodunda bulunan değişkenler vardır. Bu tür değişkenler sırasıyla yerel ve genel olarak adlandırılır. Bir fonksiyonun içinde, sadece o fonksiyonun dışında yaratılmış bir değişkene erişemezsiniz. Bunu yapmaya çalışırsanız, aynı ada sahip, ancak işlev için yerel olan yeni bir değişken oluşturacaksınız.

$per="Dima"; function primer() // Yap: yerel değişken çıktısı ( echo "Benim adım ".$per; ) echo primer();

Bu durumda ekranda "Benim adım" ifadesi görünecektir. Bu, primer işlevi içinde $per değişkeninin oluşturulduğu ve varsayılan olarak atandığı anlamına gelir. sıfır değer. Bu tür sövelerden kaçınmak için operatörü kullanmanız gerekir. küresel. Yukarıdaki kodu buna göre düzeltelim:

$per="Dima"; function primer() // Şunları gerçekleştirir: global değişken çıktısı ( global $per; echo "Benim adım ".$per; ) echo primer();

Şimdi her şey yolunda olmalı - sorun çözüldü. Unutmayın ki fonksiyon harici bir değişkenin değerini değiştirirse, böyle bir değişiklik tüm programı etkiler, bu yüzden bu operatörü dikkatli kullanmanız gerekir!

İki veya daha fazla argüman içeren fonksiyonlar

Bir işleve iletilen bazı argümanlar isteğe bağlı hale getirilebilir, bu da işlevi daha az talepkar hale getirir. Aşağıdaki örnek bunu açıkça göstermektedir:

... function yazı tipi($metin, $boyut=5) // Yap: çıktı yazı tipi boyutu ( echo " ".$metin.""; ) yazı tipi("Merhaba
",1); yazı tipi("Merhaba
",2); yazı tipi("Merhaba
",3); yazı tipi("Merhaba
",4); yazı tipi("Merhaba
",5); yazı tipi("Merhaba
",6); yazı tipi("Merhaba
");

Varsayılan olarak yazı tipi boyutu 5'tir. Fonksiyonun ikinci parametresini çıkarırsak, bu değere eşit olacaktır.

Çözüm

Hoşçakal demeden önce, bir tavsiyeye dikkatinizi çekmek istiyorum. Yazdığınız tüm fonksiyonları tek bir dosyaya koymaktan ibarettir (örneğin, function.php). Ardından, işlevi çağırmanız gereken dosyaya, function.php'yi eklemeniz yeterlidir ve her şey kullanıma hazır olacaktır. Bu, programınızdaki mantığı anlamayı çok daha kolay hale getirecektir. Bağlanmak için şunu kullanın:

include_once("işlev.php");

require_once("fonksiyon.php");

Bu makalede ele alınan konunun özünü anlarsanız, programlarınızdaki işlevleri kolayca kullanabileceğinize eminim. Bir kez daha, bu onları daha düzenlenebilir ve yeniden kullanılabilir hale getirmektir.

Sayılar üzerinde işlevler. VB dili aşağıdaki matematiksel işlevlere sahiptir: karın kasları(x) - modül hesaplaması; kare(x) - karekökün hesaplanması, atn(x) - ark tanjantının hesaplanması; çünkü(x) - kosinüs hesaplanması; günah(x) - sinüsün hesaplanması; bronz(x) - teğet hesaplanması; kayıt(x) - doğal logaritmanın hesaplanması, tecrübe(x) - üssün hesaplanması, burada x- sayısal türün işlev argümanı. VisualBasic dilinde olmayan fonksiyonların değerlerini hesaplamak için matematikten bilinen formülleri kullanmak gerekir.

İfade y= VB'de şöyle yazılır: y=sin(x^2)+sqr(tan(x))*(x+5) ^ (1/5).

İşlev argümanı parantez içinde yazılmalıdır.

Bir değeri bir türden diğerine dönüştürmek için işlevler. VB programlama dili, bir değerin veri türünü değiştirmek için işlevler sağlar. Örneğin, Double türünde bir a değişkeni ve String türünde bir s değişkeni vardır.

Bir s değişkenine bir a değişkeni yazmak için, bir S=CStr(a) tür dönüşümü gerçekleştirmek ve bir a–a=CDbl(s) değişkenine bir s değişkeni yazmak gerekir.

Değer türü dönüştürme için VB işlevleri:

CStr - dizeye dönüştür;

CByte - Byte'a dönüştürme;

CInt -Tamsayıya dönüştürme;

CLng - Uzun'a dönüştürme;

CSng - Single'a dönüştürme;

CDbl - Double'a dönüştürün.

2.6. Bilgisayar belleğinde çeşitli veri türlerinin temsili

Bilgisayar belleğindeki (sayısal ve sayısal olmayan) bilgileri temsil etmek için ikili bir kodlama yöntemi kullanılır.

Bilgisayar belleğinin temel hücresinin uzunluğu 8 bittir (bayt). Her baytın kendi numarası vardır (buna adres). Bir bilgisayarın bir bütün olarak işleyebileceği en büyük bit dizisine ne ad verilir? makine kelimesi. Bir makine kelimesinin uzunluğu işlemci kelime uzunluğuna bağlıdır ve 16, 32, 64 bit vb. olabilir.

Karakter kodlaması. Karakterleri kodlamak için bir bayt yeterlidir. Bu durumda 256 karakter gösterilebilir (ile ondalık kodlar 0'dan 255'e kadar). IBM PC ile uyumlu kişisel bilgisayarların karakter seti, çoğunlukla ASCII kodunun bir uzantısıdır (Bilgi Değişimi için Amerikan Standart Kodu - bilgi alışverişi için standart Amerikan kodu). Şu anda, karakterlerin iki baytlık temsilleri de kullanılmaktadır.

İkinin tümleyeninde tam sayıların gösterimi. Değer aralığı, depolanmaları için ayrılan bellek bitlerinin sayısına bağlıdır. n-bit bellek depolayabilir farklı değerler Örneğin, Tamsayı türündeki değerler -32768 (-2 15) ila 32767 (2 15 - 1) aralığındadır ve depolamaları için 2 bayt (16 bit) ayrılır; Uzun tip - -2 31 ile 2 31 - 1 aralığında ve 4 bayt (32 bit) olarak bulunur.

Tamsayı ikili sayıların işaretsiz gösterimi için 0 ile
, ve imzalı temsilde -
önceki
. Modern bilgisayarlarda, tamsayılardan oluşan bit ızgarasının uzunluğunun n'yi 8'in katı (yani, bir tam sayı bayt) olarak seçmek gelenekseldir.

Bir miktarın işaretle temsil edilmesi durumunda, en soldaki (en yüksek) basamak, sıfır içeriyorsa pozitif, bir içeriyorsa negatif bir sayı gösterir.

Rakamlar 0'dan başlayarak sağdan sola doğru numaralandırılmıştır. .2.2, iki baytlık bir makine sözcüğündeki bitlerin numaralandırılmasını gösterir.

Pirinç. 2.2. Hiki baytlık bir makine sözcüğünde bit ölçekleme

Ek kod pozitif sayı onunla aynıdır doğrudan kod. Bir tamsayının doğrudan kodu şu şekilde elde edilebilir: sayı şu şekilde çevrilir: İkili sistem hesaplama ve ardından soldaki ikili gösterimi, sayının ait olduğu veri tipinin gerektirdiği kadar çok sayıda önemsiz sıfır ile tamamlanır.

Örneğin, 37 (10) = 100101 (2) sayısı bir Tamsayı değeri (işaretli on altı bit) olarak bildirilmişse, doğrudan kodu 00000000000100101'dir ve Uzun bir değerse (otuz iki bit işaretli), o zaman onun doğrudan kodudur. Daha kompakt bir gösterim için, kodun onaltılık gösterimi daha sık kullanılır. Ortaya çıkan kodlar sırasıyla 0025 (16) ve 00000025 (16) olarak yeniden yazılabilir.

Negatif bir tamsayının ek kodu, aşağıdaki algoritma kullanılarak elde edilebilir:

    sayı modülünün doğrudan kodunu yazın;

    ters çevirin (birleri sıfırlarla, sıfırları birlerle değiştirin);

    ters koda bir tane ekleyin.

Örneğin, ikisinin tamamlayıcı kodunu -37'yi Uzun (32 bit işaretli) bir değer olarak yorumlayarak yazalım:

    37 numaranın direkt kodu ;

    ters kod;

    ek kod veya FFFFFFDB (16) .

Ek koduyla bir sayı elde ederken, her şeyden önce işaretini belirlemek gerekir. Sayı pozitif çıkarsa, kodunu ondalık sayı sistemine çevirmeniz yeterlidir. Negatif bir sayı olması durumunda, aşağıdaki algoritma gerçekleştirilmelidir:

    1 sayısını koddan çıkarın;

    kodu ters çevir;

    çevirmek ondalık sistem hesaplaşma. Ortaya çıkan sayıyı eksi işaretiyle yazın.

Örnekler. Ek kodlara karşılık gelen sayıları yazalım:

    0000000000010111. En anlamlı bitte sıfır yazıldığı için sonuç pozitif olacaktır. Bu 23 numaranın kodudur.

    1111111111000000. Negatif bir sayının kodu buraya yazılır. Algoritmayı uygularız: 1) 1111111111000000 (2) - 1 (2) = 11111111101111111 (2) ; 2) 0000000001000000; 3) 1000000 (2) = 64 (10) . Cevap: -64.

Amaç: 1) işlevleri tanımlama kurallarını incelemek; 2) C++ ile program yazarken fonksiyonları kullanma becerisi kazanır.

teorik bilgi

C++ dilinde programların ana birimi bir fonksiyondur.

İşlev- bir adı olan bir programın mantıksal olarak tamamlanmış, belirli bir şekilde tasarlanmış bir parçası. Fonksiyonlar, büyük hesaplama görevlerini daha küçük olanlara bölmenize izin verir.

Her C++ programı mutlaka programın gövdesi olan main adlı bir işlev içerir. Diğer tüm işlevler için, programda mevcutlarsa, prototipler bildirilmelidir - derleyiciye programdaki her işlevin adını ve biçimini söyleyen şematik temsiller.

Parametrelerle fonksiyon prototipi için sözdizimi:

dönüş_değer_türü işlev_adı (list_of_parameters_with_indication_of_types);

C++'daki işlevler standarttır (kütüphane) ve kullanıcı tarafından programlanabilir.

Standart özellikler

Standart işlevlerin açıklamaları, programa dahil edilen dosyalarda #include direktifi kullanılarak bulunur. Bu tür dosyalara başlık adı verilir; h uzantısına sahiptirler.

Ana programda bir fonksiyon adına başvurmaya fonksiyon çağrısı denir.

Fonksiyonları çağırmak, bazı eylemlerin gerçekleştirilmesine veya daha sonra programda kullanılan bazı değerlerin hesaplanmasına yol açar.

y=sin(x); // sinüs hesaplama fonksiyonu

fonksiyon tanımı

Genel olarak fonksiyonlar şu şekilde tanımlanır:

dönüş_değer_türü işlev_adı (parametre_adı yazın,..., parametre_adı yazın)

işlev_gövdesi

Programlanabilir Özellikler

Bir programcının kendi yarattığı işlevler, program yazma sürecini basitleştirir, çünkü bunlar:

    aynı işlev farklı programlarda kullanılabildiğinden, yeniden programlamayı önlemeye yardımcı olur;

    programın modülerlik seviyesini artırın, bu nedenle hataları okumak, değiştirmek ve düzeltmek daha kolaydır.

Örnek9 .1. 65 karakteri arka arkaya "*" basan bir fonksiyon oluşturalım. Bu işlevin belirli bir bağlamda çalışması için antetli kağıt yazdırma programına dahil edilmiştir. Program şu işlevlerden oluşur: main() ve stars().

// antetli kağıt

#Dahil etmek

const int Sınır=65;

boşluk yıldızları(boşluk); // yıldızlar() fonksiyon prototipi

cout<<"Moscow Institute of Electronic Engineering"<

// stars() işlevini tanımlama

için (sayım=1; saymak<=Limit; count++)

Argümanı olmayan ve herhangi bir değer döndürmeyen basit bir fonksiyon örneğine baktık.

fonksiyon parametreleri

Örnek olarak fonksiyon parametrelerinin kullanımını düşünün.

Örnek9. 2. space() fonksiyonunu yazalım, argümanı, bu işlevin yazdırması gereken boşluk sayısı olacaktır.

#define adresi "Zelenograd"

#define adı "Moskova Elektronik Mühendisliği Enstitüsü"

#define "Bilişim ve Programlama" bölümü

const int LIMIT=65;

#Dahil etmek

boşluk (int numarası);

cout<

boşluklar=(LIMIT - strlen(isim))/2; // Ne kadar olduğunu hesapla

// boşluklara ihtiyaç var

cout<

boşluk((LIMIT - strlen(departman))/2); // argüman bir ifadedir

cout<

// stars() fonksiyonunun tanımı

için (sayım=1; saymak<=LIMIT; count++)

// space() fonksiyonunun tanımı

boşluk (int numarası)

için (sayım=1; saymak<=number; count++)

Değişken numarasına biçimsel argüman denir. Bu değişken, fonksiyon çağrıldığında gerçek argümanın değerlerini alır. Diğer bir deyişle, resmi argümançağrılan altyordamın tanımındaki bir değişkendir ve gerçek argüman- çağıran program tarafından bu değişkene atanan özel değer.

Belirli bir işlevle iletişim kurmak için birden fazla bağımsız değişken gerekiyorsa, işlev adıyla birlikte virgülle ayrılmış bir bağımsız değişken listesi belirtebilirsiniz:

void printnum (int i, int j)

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

Varlığı nedeniyle fonksiyonun giriş değeri işlenebilir argüman; çıktı değeri, return anahtar sözcüğü kullanılarak döndürülür.

Bağımsız değişken değerleri biçiminde kontrol girdileri alan ayrı bir sistem (alt sistem, alt program). Çıktıda, işlev, bir skaler değer veya bir vektör değeri (yapı, dizin dizisi, vb.) olabilen bir sonuç döndürür. Fonksiyonun yürütülmesi sırasında, yönetilen sistemde hem geri döndürülebilir hem de geri döndürülemez bazı değişiklikler yapılabilir.

Yan etki

Fonksiyonlar ve Prosedürler

Bazı programlama dillerinde (örneğin Pascal'da), işlevler ve prosedürler (değer döndürmeyen alt rutinler) dilin sözdizimi ile açıkça ayırt edilir. Diğerlerinde - örneğin, C dilinde - prosedürler, bir tür (sözde tip) void - boş bir değer döndüren işlevlerin özel bir durumudur (alt küme).

Argümanlar ve Seçenekler

Bir fonksiyon çağrıldığında, ona argümanlar iletilir. Argüman bir bellek alanına (değişken, işaretçi veya başvuru) bir başvuruysa, o zaman parametresinin türüne bağlı olarak işlev, değerini kullanabilir (örneğin, bir değişken oluşturun, argümanın değerini buraya kopyalayın) ) veya bağımsız değişkenin kendisi (argüman tarafından başvurulan belleğe bir başvuru oluşturun).

Argümansız işlev

Böyle bir işlev herhangi bir argüman gerektirmez.

Ayrıca bakınız

Bağlantılar

  • PHP işlevleri. PHP İşlevlerini Kullanmanın Sözdizimi ve Örnekleri

Wikimedia Vakfı. 2010 .

Diğer sözlüklerde "İşlev (programlama)" nın ne olduğunu görün:

    Vikisözlük'te "işlev" makalesi vardır İşlev, birindeki değişikliğin bir değişiklik gerektirdiği öğeler arasındaki ilişki anlamına gelen çok anlamlı bir terimdir ... Vikipedi

    Programlamadaki saplama işlevi, anlamlı bir eylem gerçekleştirmeyen, boş bir sonuç döndüren veya giriş verilerini değiştirmeden döndüren bir işlevdir. Eşdeğer İngilizce kelime saplamadır. Kullanılan: Açıklık için ... ... Wikipedia

    daha yüksek psişik işlev: iyileşme- (yüksek zihinsel işlevlerin restorasyonu) beynin yerel beyninin lezyonları nedeniyle bozulmuş, daha yüksek zihinsel işlevlerin işlevlerini geri yüklemek için mekanizmalar ve yöntemler çalışmasına ayrılmış bir nöropsikoloji bölümü. Hakkında fikirlere dayanarak ... Büyük Psikolojik Ansiklopedi

    Matematiksel programlama, doğrusal ve doğrusal olmayan kısıtlamalar tarafından belirlenen sonlu boyutlu bir vektör uzayı kümelerinde fonksiyonların ekstremumlarını bulma problemlerini çözmek için teori ve yöntemleri inceleyen matematiksel bir disiplindir ... ... Wikipedia

    Bilgisayarlaşma alanında, ağ görevlerini programlama kavramı veya başka bir şekilde ağ programlama olarak adlandırılır, soket programlama ve istemci-sunucu programlama kavramlarına oldukça benzer, ... ... Wikipedia

    Daha yüksek dereceli bir işlev, diğer işlevleri bağımsız değişken olarak alan veya sonuç olarak başka bir işlev döndüren bir işlevdir. Temel fikir, işlevlerin diğer veri nesneleri ile aynı statüye sahip olmasıdır. ... ... Wikipedia

    PROGRAMLAMA MATEMATİKSEL- karmaşık matematiksel. eşitsizlikler şeklinde kısıtlamalar altında birkaç değişkenli fonksiyonların ekstremumunu (maksimum veya minimum) bulma problemlerini çözmek için modeller ve yöntemler. Bu, değişkenlerin mekanizmanın bazı yönlerini karakterize ettiği anlamına gelir ... ... Rus sosyolojik ansiklopedisi

    Matematiği inceleyen matematik disiplini. belirli bir bilgi ve mantıkla biçimsel bir dilde ifade edilen nesneler olarak ele alınan programların soyutlamaları. yapısı ve otomatik olarak yürütmeye tabidir. cihazlar. P. t. ... ... Matematiksel Ansiklopedi

    Programlamadaki bir fonksiyon, bir tür alt programdır. Onu diğer tür prosedür alt programlarından ayıran özellik, fonksiyonun bir değer döndürmesi ve çağrının programda bir ifade olarak kullanılabilmesidir. Bakış açısından ... ... Wikipedia

    PROGRAMLAMA, MATEMATİK- ekonomik araştırmalarda yöntem olarak kullanılan uygulamalı matematik dalı. Koşullu ekstrem problemleri çözmek için teori ve yöntemler geliştirir, çeşitli kontrol problemlerini analiz etmek için resmi aparatın ana parçasıdır ... Büyük Ekonomi Sözlüğü

Benim gibi bir geliştiriciyseniz, muhtemelen önce OOP paradigmasını öğrendiniz. İlk diliniz Java veya C++ idi - ya da şanslıysanız Ruby, Python veya C# - yani muhtemelen sınıfların, nesnelerin, örneklerin vb. ne olduğunu biliyorsunuzdur. Kesinlikle anlamadığınız şey, yalnızca OOP'den değil, aynı zamanda prosedürel, prototip odaklı ve diğer programlama türlerinden de önemli ölçüde farklı olan, işlevsel programlama adı verilen garip paradigmanın temelleridir.

İşlevsel programlama popüler hale geliyor - ve bunun iyi bir nedeni var. Paradigmanın kendisi yeni değil: Haskell belki de en işlevsel dildir ve 90'larda ortaya çıkmıştır. Erlang, Scala, Clojure gibi diller de fonksiyonel tanımına girer. İşlevsel programlamanın ana avantajlarından biri, aynı anda çalışan (ne olduğunu unuttuysanız - okuyarak belleğinizi yenileyin) ve hatasız programlar yazabilme yeteneğidir - yani kilitlenmeler ve iş parçacığı güvenliği sizi rahatsız etmeyecektir.

İşlevsel programlamanın birçok avantajı vardır, ancak rekabetçi davranış nedeniyle CPU kaynaklarının olası maksimum kullanımı ana avantajıdır. Aşağıda, işlevsel programlamanın temel ilkelerine bakacağız.

giriiş: Bu ilkelerin tümü isteğe bağlıdır (birçok dil bunları tam olarak takip etmez). Hepsi teoriktir ve işlevsel paradigmanın en doğru tanımı için gereklidir.

1. Tüm fonksiyonlar temiz

Bu kural kesinlikle işlevsel programlamada ana kuraldır. Tüm işlevler, iki koşulu sağlıyorsa saftır:

  1. Aynı argümanlarla çağrılan bir fonksiyon her zaman aynı değeri döndürür.
  2. İşlevin yürütülmesi sırasında hiçbir yan etkisi yoktur.

İlk kural açıktır - toplam(2, 3) işlevini çağırırsam sonucun her zaman 5 olmasını beklerim. Rand() işlevini çağırdığınız veya işlevde tanımlı olmayan bir değişkene eriştiğiniz anda, işlevin saflığı ihlal edilir ve buna işlevsel programlamada izin verilmez.

İkinci kural - yan etkisi yok - doğası gereği daha geniştir. Yan etki, o anda yürütülmekte olan işlevden başka bir şeyde yapılan değişikliktir. Fonksiyon dışında bir değişkeni değiştirmek, konsola yazmak, bir istisna atmak, bir dosyadan veri okumak, bir fonksiyonun saflığından uzaklaşan yan etkilere örnektir. Bu ciddi bir sınırlama gibi görünebilir, ancak tekrar düşünün. Bir işlevi çağırmanın “dışarıda” hiçbir şeyi değiştirmeyeceğinden eminseniz, bu işlevi herhangi bir senaryoda kullanabilirsiniz. Bu, rekabetçi programlama ve çok iş parçacıklı uygulamaların yolunu açar.

2. Tüm işlevler birinci sınıf ve daha üst düzeydedir

Bu kavram FP'nin bir özelliği değildir (Javascript, PHP ve diğer dillerde kullanılır) - ancak bir gerekliliktir. Aslında, Wikipedia'nın birinci sınıf işlevlere ayrılmış bütün bir makalesi vardır. Bir fonksiyonun birinci sınıf olması için değişken olarak bildirilebilmesi gerekir. Bu, işlevin normal bir veri türü olarak manipüle edilmesine ve yine de yürütülmesine izin verir.

3. Değişkenler değişmezdir

Burada her şey basit. İşlevsel programlamada, bir değişkeni başlatıldıktan sonra değiştiremezsiniz. Yenilerini oluşturabilirsiniz ama var olanları değiştiremezsiniz - ve bu sayede hiçbir değişkenin değişmeyeceğinden emin olabilirsiniz.

4. Fonksiyonların göreceli şeffaflığı

Göreceli şeffaflığın doğru bir tanımını vermek zordur. Bence en doğrusu şudur: bir işlev çağrısını bir dönüş değeriyle değiştirebiliyorsanız ve durum değişmiyorsa, işlev nispeten şeffaftır. Bu açık olabilir, ancak bir örnek vereceğim.

Diyelim ki 3 ve 5 ekleyen bir Java fonksiyonumuz var:

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

Açıkçası, bu işleve yapılan herhangi bir çağrı 8 ile değiştirilebilir, bu da işlevin nispeten şeffaf olduğu anlamına gelir. İşte bir opak fonksiyon örneği:

Public void printText()( System.out.println("Merhaba Dünya"); ) printText() // Hiçbir şey döndürmez, ancak "Merhaba Dünya" yazdırır

Bu işlev hiçbir şey döndürmez, ancak metin yazdırır ve işlev çağrısı hiçbir şeyle değiştirilmezse, konsol durumu farklı olur - bu, işlevin nispeten saydam olmadığı anlamına gelir.

5. Fonksiyonel programlama lambda hesabını temel alır

Fonksiyonel programlama, ağırlıklı olarak lambda hesabı adı verilen matematiksel bir sisteme dayanır. Ben bir matematikçi değilim, bu yüzden ayrıntılara girmeyeceğim - ancak fonksiyonel programlama kavramını oluşturan lambda hesabının iki temel ilkesine dikkat çekmek istiyorum:

  1. Lambda hesabında, fonksiyon başlığının tek anlamlı kısmı argüman listesi olduğundan, tüm fonksiyonlar isimsiz olabilir.
  2. Çağrıldığında, tüm işlevler bir körleme sürecinden geçer. Şu şekildedir: bir fonksiyon birden fazla argümanla çağrılırsa, o zaman ilk başta sadece ilk argümanla yürütülür ve hemen çağrılacak 1 daha az argüman içeren yeni bir fonksiyon döndürür. Bu süreç özyinelemelidir ve tüm argümanlar uygulanana kadar devam eder ve nihai sonucu döndürür. Fonksiyonlar saf olduğu için bu işe yarar.

Dediğim gibi, lambda hesabı burada bitmiyor - ancak biz sadece FP ile ilgili temel konuları ele aldık. Şimdi, işlevsel programlama hakkında bir konuşmada, “lambda hesabı” kelimesini yanıp sönebilirsiniz ve herkes beceriksiz olduğunuzu düşünecektir 🙂

Çözüm

İşlevsel programlama gerçek bir beyin yorgunluğudur - ancak çok güçlü bir yaklaşımdır ve popülaritesinin daha da artacağına inanıyorum.

İşlevsel programlama hakkında daha fazla bilgi edinmek istiyorsanız, JavaScript'te ( , ) FP ilkelerini kullanmanın yanı sıra işlevsel C#'a ayrılmış örnekleri incelemenizi öneririz.