VS2015에서 Swift2.0 입문 ③기본 문법 계속과 Swift에서 LINQ

서.



MS의 VisualStudio2015에서 Swift2.0 돌아가기(RemObjects Silver)를 실행해 본다.
지난번까지로, RemObjects Silver가, 싶은 불평대로, Swift2.0 준거라고 할 수 있는 것을 알았으므로,
이번에는 가볍게 문법 확인. 클로저를 다루면서 .NET의 Linq도 사용해 본다.

*주, Swift 미경험의 사람으로 개설이 필요한 때는 적절히 이 기사당을 칠라 보는 것 : Swift 문법 메모 *
# Swuft1.x 시대의 것이므로, 현행 버젼에서는 움직이지 않는 코드도 있을지도 모르지만, 참고가 된다

1. if 문, 삼항 연산자, 클로저



모두 기본적인 곳은 동작했다.

Program.swift
import System.Collections.Generic
import System.Linq
import System.Text
import System.Threading.Tasks

println("Console App:")


let str = "h e l l o w o r l d"
var spcs=""
for c in str{
    if c != " " {println(spcs+c)} else {spcs += c} //if文
} 
println(" => if文の例\n")

spcs=""
for c in str{
    spcs += (c == " ") ? "○" : "" //三項演算子
    print(spcs+c)
} 
println(" => 三項演算子の例\n")

let arr = split(str) {a in a == " "} // { }部分がクロージャ
for a in arr {println(a)}
println(" => クロージャの例")

Console.ReadLine()


if문은 golang같다, 삼항 연산자는 C같지만, 예상의 범위내.

Swift의 클로저는, 여러가지 쓰는 방법이 준비되어 있다.
위의 예에서는 split 함수가 수행하는 문자열 분할 작업의 내용을 {$0 == ""}이라는 클로저로 정의하고 있다(요컨대 공백 문자로 문자열을 분할하여 배열을 얻는다).

이하에 실행 결과를 인용한다.


클로저에 익숙해질 때까지는 기본적인 부분을 Swift의 클로저가 재미 있습니다.
F#이나 haskell이나 scala등의 (순수·불순 불문하고) 함수형 언어를 사용한 적이 있는 사람은 간결한 약기법으로 자꾸자꾸 쓰면 좋을 것이다.

내가 좋아하는 글은 다음과 같습니다.

let arr = split(str) {$0 == ""}// { } 부분이 클로저

2. Swift 클로저 전달, LINQ



그런데, C#에서 함수형 테이스트라고 하면, Linq.
RemObjects Silver의 .NET 실행 환경에서는 기본적으로 Linq가 가져옵니다.

import System.Linq

Swift 경계에서 사람은, 무엇 그것 상태라고 생각하기 때문에, Modern C# 입문 비망록 - Linq 입문편 를 칠라 봐 두자.
예를 들어, Somethings라고 하는 Int형의 컬렉션이 있다고 한다.
Somethings의 각 요소 중 10개 이상의 것을 꺼내고, 꺼낸 것을 제곱하는 조작을 Linq에서는 다음과 같이 쓴다.
//C#の例

 Somethings.Where(x => x > 10).Select(x => x * x)

()로 둘러싸인 부분은 익명 함수. 이건 Swift의 클로저 ... 뭐야, 어쩌면.

Swift에서 Linq를 작성해보십시오.
let arr2 = 1...20                   //配列を得る
let arr3 = arr2.Where {$0 > 5} .Select{$0 * $0}   //  Linq:Where&Select
for a in arr3 {print(a+":")}             //(a+":"の部分は暗黙の型変換

실행 결과:



C#에서 Linq의 사례는 곳곳에 구르고 있으므로, 그쪽을 참고로 여러가지 써 보면 좋을 것이다.
예:
htp://밤h시y. bぉg. FC2. 소 m/bぉg-엔트리-274. html

#Swift의 테이스트적으로는 F#의 사례도 참고가 될 것 같다.

3. .NET에서 Linq를 사용하는 의미.



.NET&JVM상의 Swift 호환 환경 RemObjects Silver에서는 당좌, iOS상의 Swift 라이브러리를 그대로 가져오는 것은 어려울 것 같다. .NET 환경상에서는 Linq를 사용하는 것으로, 컬렉션의 조작등이 꽤 편해지는 것이 최대의 의의.
또한 Swift에서 C# 라이브러리를 호출하는 방법 등의 마스터에도 연결되어 갈 것으로 기대할 수 있다(그 때문에, 조만간 C#의 delegate와 Swift의 delegate를 비교하고 싶다).

VS2015상에서 움직이는 RemObjects Silver에서는, JVM보다 .NET상에서의 Swift 실행이 제대로 할 수 있을 것 같은 이미지. 앞으로는 (자신은 사용한 적이 없지만) xamarin과 같은 크로스 플랫폼 개발 환경으로 진화해 나갈지도 모른다. 자신이 노리는 곳은 좀 더 RemObjects Silver에 익숙한 후에 쓰고 싶다.

좋은 웹페이지 즐겨찾기