ფუნქციური რეაქტიული პროგრამირების სწრაფი შესავალი (FRP)

FRP წარმოადგენს პროგრამირების ორი პარადიგმის კვეთა. სანამ კონცეფციებს უფრო ღრმად ჩავწვდებით, ცოტა მეტი უნდა ვიცოდეთ რამდენიმე ძირითადი ტერმინის შესახებ.

FRP: რეაგირება მოვლენებზე

იმპერატიული პროგრამირება

ტრადიციულად, ჩვენ ვწერთ კოდს, სადაც აღწერილია, თუ როგორ უნდა მოაგვაროს ის პრობლემა. კოდის თითოეული სტრიქონი თანმიმდევრულად ხორციელდება სასურველი შედეგის მისაღებად, რომელიც ცნობილია როგორც იმპერატიული პროგრამირება. იმპერატიული პარადიგმა პროგრამისტებს აიძულებს დაწერა "როგორ" პროგრამა გადაჭრას გარკვეულ ამოცანას. გაითვალისწინეთ, რომ წინა განცხადებაში საკვანძო სიტყვაა „როგორ“.

აქ არის მაგალითი:

მოდით რიცხვები = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var ციფრებიLessThanFive = [Int] ()
ინდექსისთვის 0 .. <რიცხვებში
    {
    თუ რიცხვები [ინდექსი] <5
        {
        numberLessThanFive.append (ნომრები [ინდექსი])
        }
    }

როგორც ხედავთ, ჩვენ თანმიმდევრულად ვასრულებთ ინსტრუქციების სერიას სასურველი შედეგის მისაღებად.

ფუნქციური პროგრამირება

ფუნქციური პროგრამირება არის პროგრამირების პარადიგმა, სადაც ყველაფერს ასრულებთ ფუნქციის შედეგად, რომელიც თავიდან აიცილებს მდგომარეობის შეცვლას და მონაცემთა მუტაციას. ჩვენ განვიხილავთ კონცეფციებს, როგორიცაა სახელმწიფო და მონაცემთა ცვლადი და მათი მნიშვნელობა შემდგომ სექციებში, მაგრამ ცნობისთვის:

  • განიხილეთ სახელმწიფო, როგორც ერთ-ერთი განსხვავებული პერუმატი და კომბინაცია, რომელიც თქვენს პროგრამას ნებისმიერ დროს შეუძლია მისი შესრულების დროს
  • მონაცემთა ცვალებადობა არის კონცეფცია, სადაც მოცემული მონაცემთა ბაზა შეიძლება შეიცვალოს მოცემული დროის განმავლობაში, პროგრამის შესრულების დროს.

იგივე მაგალითი, რომელიც მიენიჭა იმპერატიული პროგრამირების გამოყენებით, შესაძლებელია შემდეგი გზით გამოიყენოთ ფუნქციური მიდგომით:

მოდით რიცხვები = [1, 2, 3, 4, 5, 6, 7, 8, 9]
მოდით ნომრებიLessThanFive = ნომრები.ფილტრი {$ 0 <5

ჩვენ ვიკვებებით ფილტრის ფუნქციას დახურვით, რომელიც შეიცავს გარკვეულ კრიტერიუმს. შემდეგ ეს კრიტერიუმი გამოიყენება თითოეულ ელემენტზე რიცხვების მასივში, ხოლო შედეგად მიღებული მასივი შეიცავს ელემენტებს, რომლებიც აკმაყოფილებენ ჩვენს კრიტერიუმებს.

ყურადღება მიაქციეთ ორივე მასივის დეკლარაციას ორივე მაგალითში.

პირველ მაგალითში, ნომრებიLessThanFive მასივი გამოცხადდა, როგორც var, ხოლო მეორე მაგალითში, იგივე მასივი გამოცხადდა როგორც let.

რამდენიმე ზარს რეკავს?

რომელი მიდგომა უკეთესია, რომელი მასივი უფრო უსაფრთხოა სამუშაოდ?

რა მოხდება, თუ ერთზე მეტი ძაფი ცდილობს იმუშაოს იმავე მასივში და მის ელემენტებზე?

არ არის მუდმივი მასივი უფრო საიმედო?

რეაქტიული პროგრამირება

რეაქტიული პროგრამირება არის ასინქრონული მონაცემთა ნაკადების ან მოვლენების ნაკადების დაპროგრამების პრაქტიკა. ღონისძიების ნაკადი შეიძლება იყოს, როგორც კლავიატურა, ღილაკების ონკანები, ჟესტები, GPS მდებარეობის განახლებები, ამაჩქარებელი და iBeacon. შეგიძლიათ მოუსმინოთ ნაკადს და მასზე რეაგირება მოახდინოთ.

თქვენ შეიძლება გსმენიათ რეაქტიული პროგრამირების შესახებ, მაგრამ შეიძლება გასაგრილებლად, საშინლად ან კრიპტოლოგიურად ჟღერდეს ეს, ალბათ. თქვენ ალბათ მინახავს მსგავსი რამ:

var twoDimensionalArray = [[1, 2], [3, 4], [5, 6]]
მოდით flatArray = twoDimensionalArray.flatMap {მასივი
    Return array.map {მთელი რიცხვი
        დაბრუნება მთელი რიცხვი * 2
    }
}

ბეჭდვა (flatArray)

გამოსავალი: [2, 4, 6, 8, 10, 12]

ერთი შეხედვით, წინა კოდი შეიძლება ცოტათი გაურკვეველი იყოს და ეს შეიძლება იყოს მიზეზი იმისა, რომ ზურგი აქცია ზურგი პროგრამირების ამ სტილზე. რეაქტიული პროგრამირება, როგორც უკვე აღვნიშნეთ, არის პროგრამირების ღონისძიებათა ნაკადებით.

თუმცა, უფრო დიდი კითხვა კვლავ უპასუხოდ რჩება. რა არის ფუნქციური რეაქტიული პროგრამირება (FRP)?

FRP არის ფუნქციური და რეაქტიული პარადიგმების ერთობლიობა. სხვა სიტყვებით რომ ვთქვათ, ის რეაგირებს მონაცემთა ნაკადებზე, ფუნქციური პარადიგმის გამოყენებით. FRP არ არის კომუნალური პროგრამა ან ბიბლიოთეკა - ეს ცვლის თქვენი დიზაინის შექმნის გზას და თქვენი პროგრამების შესახებ აზროვნების გზას.

შემდეგ ბლოგზე ვისაუბრებ რეაქტიული პროგრამირების ძირითადი სამშენებლო ბლოკების შესახებ - მანამდე დარჩი თვალყური და ისიამოვნე წაკითხული :)

რეაქტიული კონცეფციების შესახებ მყარი გაცნობის და iOS პროგრამების დაწერა RxSwift– ში შეგიძლიათ წაიკითხოთ ჩემი წიგნი: რეაქტიული პროგრამირება Swift 4 – ში.

ჩემი პროექტების უმეტესობა და გადმოტვირთვის კოდია ჩემს საჯარო github repos- ში

ამ თემის შესახებ მეტი შეგიძლიათ იხილოთ აქ

გმადლობთ კითხვისთვის, გთხოვთ, გააზიაროთ, თუ თქვენთვის სასარგებლო აღმოჩნდა