Swift 集成了哪些語言的特性?


大部分21世紀靜態類型語言必有的東西都被集成了進去,同時附帶的還有:

  • Generics[泛型] / Type Inference[類型推測](C++ / Haskell)
  • Concepts / Type Constraints[類型約束] ( C# )
  • Algebraic Data Type[代數數據類型] ( Haskell / Rust)
  • Closure[閉包] / Anonymous Function[匿名函數] (Objective-C)
  • Pattern Matching[模式匹配](Haskell / Rust)
  • Extension[類型擴展] (Ruby / Objective-C / C#)
  • Class based Object-Orientation[基於Class的面向對象](Smalltalk)
  • Properties[屬性](C#)
  • Protocol based Polymorphism[基於Protocol的多態] (Objective-C)
  • Keyword parameters (Objective-C / Python)

如果非要說從誰那裡借來的,真的不好下定論,關於Swift的具體設計還要等看過Reference Manual之後才能確定吧。

The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list. (來自:Chris Lattner"s Homepage)


雖然Swift是一個為開發iOS和OS X app設計的全新編程語言,但是Swift的很多特性還是跟C和Objective-C相似。

Swift也提供了與C和Objective-C類似的基礎數據類型,包括整形Int、浮點數Double和Float、布爾類型Bool以及字元串類型String。Swift還提供了兩種更強大的基本集合數據類型,Array和Dictionary,更詳細的內容可以參考:Collection Types。

跟C語言一樣,Swift使用特定的名稱來定義和使用變數。同樣,Swift中也可以定義常量,與C語言不同的是,Swift中的常量更加強大,在編程時使用常量能夠讓代碼看起來更加安全和簡潔。

除了常見的數據類型之外,Swift還集成了Objective-C中所沒有的「元組」類型,可以作為一個整體被傳遞。元組也可以成為一個函數的返回值,從而允許函數一次返回多個值。

Swift還提供了可選類型,用來處理一些未知的不存在的值。可選類型的意思是:這個值要麼存在,並且等於x,要麼根本不存在。可選類型類似於Objective-C中指針的nil值,但是nil只對類(class)有用,而可選類型對所有的類型都可用,並且更安全。可選類型是大部分Swift新特性的核心。

可選性類型只是Swift作為類型安全的編程語言的一個例子。Swift可以幫助你更快地發現編碼中的類型錯誤。如果你的代碼期望傳遞的參數類型是String的,那麼類型安全就會防止你錯誤地傳遞一個Int值。
Swift編程語言 http://www.kokojia.com/biancheng/video23195-1376.html這個鏈接裡面內容挺好的,有興趣的可以看看,說不定對你有所幫助。


Object-C javascript Python


基本涵蓋了,函數編程語言(尤指Haskell) 和 面向對象編程語言 的 所有特性。
若不是存在Object-C的包袱和移動端的限制,它會更優雅。

跑題:能預見到某天伺服器上也會流行Swift編程


Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.

Source: http://nondot.org/sabre/


直接搬個HN的回復吧,詳見:

https://news.ycombinator.com/item?id=7835099

C:

typealias

struct

control structures

labeled statements AKA gotos

varargs

C++:

default arguments

class instance construction syntax

// comment

superclass, implementing protocol declaration syntax

semi-virtual class init, deinit

Go:

No parentheses around the condition part of control statements

Unicode identifiers

shorthand for signed and unsigned integer types U?Int(8|16|32|64)

C#:

in-out params

properties

subscript access of class member values

Objective-C:

ARC

protocols

extensions

param names as method names

willSet/didSet

nil?

Java:

enum

@final

super keyword

override method keyword

Scala:

Local type-inference, blend of an ML flavored FP with OOP without the noise and believe it or not, even more powerful in specifying generic type constraints. No stupid JVM type erasures either so you can actually create an instance of a generic type, just like C++ templates.

Self:

self

Python:

for i in enumerate(seq)

for key, value in dictionary

Type(value) explicit type conversion syntax

No public/private/protected class member access modifier bullshit

Array literals, dictionary is also like Python but use [] instead of {}

Ruby:

0..100, 100_000

Lisp:

closures

Scheme, Coffeescript:

? optional type modifier

Bash:

$0, $1... inside short callback closures

Innovations

---------------

break-less switch, optional fall-thru, comma as multiple case, case can be any value of any type, condition or a type constraint for pattern matching, supports method call shorthand

generic type constraint queries

overflow operators

@prefix, @postfix, @infix, @assignment modifiers for operator overloading Trailing closure as partial function application

除此之外也有評論說Swift借鑒了Rust。


javascript ES6很多語法一樣,不知道現在swift開源了會怎樣,是會像javascript一樣到處都用呢,還是像C#那樣,雖然語言特性強但始終跑不出微軟的圈子呢?


推薦閱讀:

你在初學編程的時候遇到過哪些有趣的事情?
Visual Basic 作為初學者的編程語言 究竟有多少常見程序是用它編寫的?
為什麼 PHP 又流行起來了?
30歲學習python晚嗎?
為什麼越來越多的碩士博士研究生放棄matlab開始使用matplotlib?

TAG:編程語言 | 編程 | Objective-C | Swift語言 |