導航:首頁 > 編程語言 > 函數式編程ios

函數式編程ios

發布時間:2022-01-24 11:41:30

A. IOS開發 函數傳入指針,與函數傳入引用的區別

相關概念

c++三種傳遞參數方式

傳參數的值(稱值傳遞,簡稱傳值),傳參數的地址(稱地址傳遞,簡稱為傳址),和引用傳遞(稱為傳引用),相應的函數傳值調用,傳址調用和傳引用調用

形參、實參

函數定義時參數表中的參數稱為形式參數,簡稱形參;函數調用時參數表中的參數稱為實際參數,簡稱實參。實參和形參之間的數據傳遞稱為形實結合

說明

通常情況下,C++是傳值調用,它是單向的,只能從實參到形參。形參實質上市實參的一種拷貝,所以傳遞時不會改變外部實參的值

引用的含義及功能

即別名,功能主要是傳遞函數的參數和返回值

引用的規則

(1)引用被創建的同時必須被初始化(指針則可以在任何時候被初始化)。
(2)不能有NULL引用,引用必須與合法的存儲單元關聯(指針則可以是NULL)。
(3)一旦引用被初始化,就不能改變引用的關系(指針則可以隨時改變所指的對象)。

實例
#include <iostream>
using namespace std ;
void Swap(int x, int y) ;
int main(void)
{
int a = 1 ;
int b = 2 ;

cout << "a = " << a << ", " << "b = " << b << endl ;

Swap(a, b) ;

cout << "a = " << a << ", " << "b = " << b << endl ;

system("pause") ;
return 0 ;
}

一:值傳遞
void Swap(int x, int y)
{
int temp = x ;
x = y ;
y = temp ;
}

輸出結果:
a = 1, b = 2
a = 1, b = 2
原因:Swap(int x, int y)函數採用值傳遞的方式,傳入的實參實際上是a和b的副本而非其本身,所以對副本的改變並不會反應到a和b本身上。

二:引用傳遞
void Swap(int &x, int &y)
{
int temp = x ;
x = y ;
y = temp ;
}
輸出結果:
a = 1, b = 2
a = 2, b = 1
原因:Swap(int x, int y)函數採用引用傳遞的方式,傳入的實參實際上是a和b的引用,對引用的改變會直接反應到a和b本身上。

三:指針傳遞
1. 改變指針本身
void Swap(int *x, int *y)
{
int *temp = x ;
x = y ;
y = temp ;
}

調用方法:Swap(&a, &b) ;

輸出結果:
a = 1, b = 2
a = 1, b = 2
原因:Swap(int x, int y)函數採用指針傳遞的方式,傳入的實參實際上是a和b的指針的副本,而且改變的是副本本身而非其間接引用,所以不會影響的指針所指向的值,即a和b本身上。

B. iOS 什麼是函數式編程

在函數式語言中,函數作為一等公民,可以在任何地方定義,在函數內或函數外,可以作為函數的參數和返回值,可以對函數進行組合。 純函數式編程語言中的變數也不是命令式編程語言中的變數,即存儲狀態的單元,而是代數中的變數,即一個值的名稱。
像 js,python,scala等語言中多少都有函數式編程的影子

C. 如何評價 Apple 新推出的編程語言 Swift

有人說它相當於 C#,或是相當於 Scala 對 java 的改進,我可以告訴大家,Swift 不是這樣的語言。它更像一種讓人快速做原型的 toy language。
要求 Apple 發布下一代 Objective-C 語言的呼聲早就有了,每年寫數萬字 OS X 評論的 Ars Technica 兩年前就寫了 Apple 應該去做一個語言,Objective-C without C 並且使用更現代的功能和更短的 API,以及對自動類型推導的支持,文章見
OS X 10.8 Mountain Lion: the Ars Technica review 。
但 Apple 顯然沒有認真對待這門語言。很明顯的,他們根本不想把ObjC給替換掉。並且按Apple的風格,如果他們把Swift當ObjC的未來來對待,肯定會有一到兩個iOS/Mac應用使用Swift改寫。(比如Apple 當年要砍 Carbon,首先做的就是把 Finder 重寫了)。
從語言角度,Swift 有太多的缺點:
- 它的標准庫太差,只有Dictionary, Array 和 String及數這幾種數據結構,連個 Set 都沒有。想用別的?你還是要用 ObjC 的。
- 它沒有任何對非同步/同步編程的支持。它沒法綁定使用 GCD,因此任何正經的網路應用根本無法編寫。
- 它沒有任何的保護機制(private, protected),所有的 method和 variable 都是全局可見的,這顯然不能滿足正經工程項目的需要。
- 只能和 ObjC 互動。如果你想正經地使用C或者C++,你得寫 ObjC 的 wrapper。
- 沒有辦法 catch Objective-C 的 exception,如果一旦出了 exception,你的 App 立馬就崩了。
Chris 在設計這門語言時,可以明顯地看到他的短視。這也很正常,他是一個做編譯器的,不是做語言研究的。所以這門聲稱支持函數式編程的語言,根本不是函數式的:
- 僅有的支持在lazy,閉包,及簡單的函數語言函數(如map, filter)。這ObjC中都能做
- 沒有pattern matching
- 類型推導差不多和 C++11 差不多,沒有使用hindley milner。
從上面這些特點看, Apple對其的定位僅是給對ObjC頭疼的開發者降低學習曲線所推出的玩具語言。前面五條中的每一條,基本都是致命的,因此 Apple 自己的項目也不會使用。做個早期 proof of concept的 prototype 到是可以的。

D. Swift能代替Objective-C嗎

這是我在網上上看到的答案,復制粘貼過來和大家分享一下,因為我和很多人一樣很關心Swift的出現對Mac開發的影響和對Objective-C的影響。
我文章的中心是,以 Apple 目前給出的各種資料來看,這語言不會替代掉ObjC,它不是下一代的ObjC。它有很多缺點,使得它不足以做大型項目。這些缺點使得,Apple 自己都沒有使用它做 Mac/iOS 的 app。我不排除明年後年它有很大改進,但至少現在還沒有這端倪。
因此,如果你會ObjC,你不需要去看它。
但你如果問我這語言對普通開發者重要不重要,我說重要,可以明確告訴你這一點--它是 Apple 在 WWDC 向全世界推出的重磅語言我怎麽能說它不重要? 它降低了入門的門檻。使得大量的 JS, Python, Ruby用戶會使用 Apple 的技術為其開發程序。它的作用,和 Core Data, Interface Builder 一樣,能讓你快速寫出一個能用的程序來。但如果你想稍做些正經事,就心有餘力不足了。所以和 Apple 自己的 Mail 也不會去用 Core Data,自己 iPhoto 不會去用 UICollectionView,稍復雜的 App 都不會去用 Interface Builder 一樣,Apple 自己不會用 Swift。它只是給三五個人的小團隊能迅速做出能用的程序,讓大公司能快速做些 Prototype 而已。
====
有人說它相當於 C#,或是相當於 Scala 對 Java 的改進,我可以告訴大家,Swift 不是這樣的語言。它更像一種讓人快速做原型的 toy language。
要求 Apple 發布下一代 Objective-C 語言的呼聲早就有了,每年寫數萬字 OS X 評論的 Ars Technica 兩年前就寫了 Apple 應該去做一個語言,Objective-C without C 並且使用更現代的功能和更短的 API,以及對自動類型推導的支持,文章見 OS X 10.8 Mountain Lion: the Ars Technica review 。
但 Apple 顯然沒有認真對待這門語言。很明顯的,他們根本不想把ObjC給替換掉。並且按Apple的風格,如果他們把Swift當ObjC的未來來對待,肯定會有一到兩個iOS/Mac應用使用Swift改寫。(比如Apple 當年要砍 Carbon,首先做的就是把 Finder 重寫了)。
從語言角度,Swift 有太多的缺點:
它的標准庫太差,只有Dictionary, Array 和 String及數這幾種數據結構,連個 Set 都沒有。想用別的?你還是要用 ObjC 的。是的,當你用原生數據結構時,速度比ObjC快。但是那僅限於那幾個。 它沒有任何對非同步/同步編程的支持。它沒法綁定使用 Grand Central Dispatch,因此任何正經的網路應用根本無法編寫。
它沒有任何的保護機制(private, protected),所有的 method和 variable 都是全局可見的,這顯然不能滿足正經工程項目的需要。
只能和 ObjC 互動。如果你想正經地使用C或者C++,你得寫 ObjC 的 wrapper。這基本限制了你使用大量的 C/C++ 庫函數。
沒有辦法 catch Objective-C 的 exception,如果一旦出了 exception,你的 App 立馬就崩了。這也基本限制了你使用很多 ObjC 舊代碼庫。
Chris 在設計這門語言時,可以明顯地看到他的短視。這也很正常,他是一個做編譯器的,不是做語言研究的。所以這門聲稱支持函數式編程的語言,根本沒有大多函數式語言都普遍存在的功能:
僅有的支持在lazy,閉包,及簡單的函數語言函數(如map, filter)。這ObjC中都能做
沒有pattern matching
類型推導差不多和 C++11 差不多,沒有使用hindley milner
從上面這些特點看, Apple對其的定位僅是給對ObjC頭疼的開發者降低學習曲線所推出的玩具語言。前面五條中的每一條,基本都是致命的,因此 Apple 自己的項目也不會使用。做個早期 proof of concept的 prototype 到是可以的。
我可以想像,實現上 Swift 是很簡單的(LLVM很成熟了,寫個新語言越來越簡單,比如只要幾步就能做個小語言: 1. Kaleidoscope: Tutorial Introction and the Lexer),當然有可能 Apple 將來會解決這些問題使得其真正實用。但現在來看,Apple 並不希望 Swift 來替代 Objective C。

E. ios的kvo和響應式編程一樣嗎

ReactiveCocoa 可以說是結合了函數式編程和響應式編程的框架,也可稱其為函數響應式編程(FRP)框架,強調一點,RAC雖然最大的優點是提供了一個單一的、統一的方法去處理非同步的行為,包括delegate方法

F. 可以跳過 Objective-C 然後直接學習 Swift 語言嗎

如果只是學習Swift的語法和做基本練習的純計算性的編程,不用學習Objective-C,用Swift的Playground就很好了。但沒有Objective-C的基礎,幾乎不可能用Swift寫出Mac OSX和iOS的GUI實用程序的,這些需要cocoa框架,而cocoa框架是以Objective-C來編寫API的。Swift的cocoa API其實只是對Objective-C的API的直接bind。
這幾天用了Swift後感覺其和Objective-C是渾然一體的,用Swift調用Objective-C的函數是非常自然的,兩者之間沒有明顯的界限,就像編寫C語言的嵌入式匯編一樣。
我覺得蘋果為何要推出Swift這門語言,主要還是Objective-C缺少現代編程語言的特性,特別是很難在Objective-C中增加函數式編程的特性。推出Swift語言,可以大量吸收現代編程語言的優點,加入函數式編程的特性,使得可以快速開發健壯、可靠、復雜的應用程序。而Swift又不是直接取代Objective-C的位置,是在其之上,因此又很好的繼承了Objective-C的優良的GUI應用的編程能力。即能創新進取,又保持優良傳統,多好的一個設計呀。有了Swift後,蘋果平台上的Mac OSX和iOS的native應用開發就進入了現代編程語言的范疇,跟上了時代的發展。

G. ios支持swiftpoint嗎

《Swift 的強大之處》:介紹了Swift語言的特性,包括支持函數式編程、類型安全、不可變性等。
《Swift 的函數式 API》:Swift 引入了泛型和函數式編程的思想,極大地擴展了設計的空間。文章借對 Core Image 進行函數式 API 封裝為例,展示出應用 Swift 進行函數式編程的能力。
《iOS8開發者專題》:由CocoaChina整理出來的iOS8相關的資料匯總。
《用 Swift 開發一個 TODO 應用》:作者 @請叫我汪二 在文章中教你如何完成一個 TODO 的應用,功能包括添加任務和瀏覽任務。適合有一定 Objective-C 的開發基礎但是還沒怎麼接觸 Swift 的 iOS 開發者,希望通過這樣一個簡單的例子可以和大家一起熟悉一下 Swift。
《黑魔法attribute((cleanup))》:編譯器屬性 __attribute__用於向編譯器描述特殊的標識、檢查或優化。作者在文章中介紹了其中一個名為cleanup的「黑魔法」屬性。
《Swift中類的初始化器與繼承》:Swift 為類定義了兩種初始化器來確保類中所有的儲存屬性都能得到一個初始化值。這兩種初始化器就是「指定初始化器」(Designated Initializer)與「便利初始化器」(Convenience Initializer),文章對其做了介紹。
《大屏iPhone的適配》:自從蘋果出了大屏iPhone後,iOS開發也要做適配了, 這里大概總結下這幾天了解到的大屏適配的注意事項。
《Using Vector Images in Xcode 6》:文章介紹了在Xcode 6中使用矢量PDF圖形的具體操作方法。
《Swifty methods》:文章討論了Swift的函數命名習慣,並與Objective-C語言做了對比。
《Apple Pay Human Interface Guidelines》:蘋果發布了支付功能Apple Pay的人機交互指南。
視頻

H. ios 函數式編程為什麼可以用點

由於iphone SDK都是需要使用Objective-C的語法調用,所以不能完全不用Obj-c. 另外,現在也沒有針對iphone SDK的C++編譯器。倒是有人在開發java編譯器for iphone。xcode底層使用GCC編譯器編譯Obj-C,可以識別標準的C函數與語法。如果你能找到代替UIKit以及foundation的類庫,應該也可以試試。 另外來看看蘋果新版的iPhone軟體開發協議: 應用程序僅能以蘋果描述的形式使用SDK中提供的官方API,不能使用或調 用任何私有API。應用程序需原生使用Objective-C、C、C++語言編寫,或由iPhone OS WebKit引擎執行JavaScript代碼。只有以C、C++和Objective-C語言編寫的代碼可以編譯並直接鏈接到官方API(禁止應用程序 通過中間解釋程序或兼容層、工具調用官方API)。

I. cout << setiosflags(ios::left)和cout << left的區別是啥

一,cout是C++編程語言互換流中的標准輸出流,需要iostream支持。讀為 "c out"。 Cout的相關信息 1 cout的類型是 ostream 2 ostream使用了單例模式, 保護的構造函數,不能在類外創建另一個對象(用 ostream os 測試) 拷貝構造私有,不能通過已有對象,構造新對象(用 ostream os(cout) 測試) 拷貝賦值私有,(用 cout=cout 測試) 3 cout在命名空間std中,使用前需要using namespace std,或者std::cout 4 可以使用引用,或指針指向這個對象,意思想說,想用ostream 做一個函數的形式參數,就必須使用引用或指針。因為實參肯定是cout,且只能有這一個對象。 5 cout<<對象; 對象的類型用OO表示,如想用cout列印一個對象,即cout<<對象,可使用如下程序 friend ostream& operator<< (ostream& os,const OO& c) {//為什麼必須使用return os << c.成員1 <<" : "<<c.成員2;} cout[英]['kaʊt][美]['kaʊt],標准輸出; 。 二,cout[英]['kaʊt][美]['kaʊt],標准輸出; 。

J. ios rac 哪個版本是oc

ReactiveCocoa 可以說是結合了函數式編程和響應式編程的框架,也可稱其為函數響應式編程(FRP)框架,強調一點,RAC雖然最大的優點是提供了一個單一的、統一的方法去處理非同步的行為,包括delegate方法,blocks回調,target-action機制,notifications和KVO.但是不要簡單的只是單純的認為他僅僅就是減少代碼復雜度,更好的配合MVVM

閱讀全文

與函數式編程ios相關的資料

熱點內容
安卓如何查看異常重啟 瀏覽:715
解壓音樂排名 瀏覽:383
安卓手機瀏覽器怎麼掃二維碼 瀏覽:715
通達信成本均線源碼 瀏覽:614
可以下載的解壓音頻 瀏覽:564
海賊王怎麼換伺服器 瀏覽:318
計算機上的共享文件夾映射 瀏覽:940
榮耀安裝包在文件夾哪裡 瀏覽:195
機票php源碼 瀏覽:231
linux共享mac 瀏覽:922
中國沒有國外的伺服器地址 瀏覽:759
為什麼退款伺服器連接錯誤 瀏覽:557
android簡訊存儲位置 瀏覽:972
unix網路編程卷4 瀏覽:808
找靚機app下單什麼時候發貨 瀏覽:413
android一個應用兩個進程 瀏覽:803
linux硬碟復制 瀏覽:808
php圖片伺服器搭建 瀏覽:801
下載壓縮文件怎麼打開 瀏覽:194
新建文件夾叫什麼名字 瀏覽:567