PythonとSwiftとKotlinについて調べてみた！

PythonとSwiftとKotlinについて比較して調べてみた！


#比較の動機
　今後発展しそうな言語について調べてくらべてみました。
　Pythonは、世界的に人気があった言語だったため
　SwiftとKotlinはスマホ関係により選択
　Kotlinがgoogleがandroidのサポート言語として発表された直後だったため将来の発展性を見据えて選択した。

#PythonとSwiftととKotlinの簡単な解説

##Python
　Pythonは人工知能や機械学習でよくつかわれている。
　その理由は数学系のライブラリが充実しているのもあり、
　また、インタープリター言語のため速度には劣るが、結果が照会しやすい。

##Swift
　Apple関連（iphone、MacOS）の開発をするならば避けて通れない言語

##Kotlinの解説
　javaのいいとこどりをした言語で基本的にはjavaと互換性がある。

#PythonとSwiftととKotlinの特徴の違い

##特徴の違い

　javaは推論なし
　Kotlinは型を推論してくれる。明示的に指定することも可能。
　欠点
　Python：インタープリター型なので速度は今一つ
　swift：Apple関連開発でしか使えない。
　Kotlin：あまり人気がない（一時期人気が急上昇した）


##今後の発展性
　Python：人工知能、機械学習系で今後も使われていくでしょう。
　swift：Appleが継続する限り続きますが、ころっと新しい言語が現れるかも。
　ただし、開発現場では未だに Objective-C のシェアが大きく、TOP 100 APP の内 Swift 利用は 1 割ほど* に留まっています。
　Kotlin：googleがandroidのサポート言語として発表した。

#ちなみに
##外国での人気順位
アメリカに本部を持つ電気工学・電子工学技術の学会「IEEE」による学会誌「IEEE Spectrum」が、プログラミング言語の人気ランキング「Top Programming Languages 2017」を発表しました。
総合ランキング
1.Python
2.C
3.Java
4.C++
5.C#
6.R
7.JavaScript
8.PHP
9.Go
10.Swift
11.Arduino
12.Ruby
13.Assembly
14.Scala
15.Matlab
16.HTML
17.Shell
18.Perl
19.Visual Basic
20.Cuda
https://spectrum.ieee.org/computing/software/the-2017-top-programming-languages

##言語別単価【２０１７年時点】
第1位「Scala」（626万円）
1位の「Scala」は、高い生産性と堅牢性を実現し、オブジェクト指向言語と関数型言語の特徴を併せ持った言語で、
米Twitterや米LinkedInなどが利用していることで知られます。
世界的には「Scala」の採用企業が増えているのに対し、扱える人材が少ないことから年収が高い言語といわれています
国内でも、インターネット企業を中心に普及しており、今後もさらに注目されることが予想されます。

第2位　「Python」（601万円）
2位の「Python」はデータ分析や機械学習の分野で広く使われています。
機械学習や深層学習における応用が進み、AIの実用化が研究されるなかでさらに需要が高まると見られます。

第3位　「Kotlin」（577万円）
3位の「Kotlin」の求人数はまだ少ないもののAndroidエンジニアを中心に求人が掲載されています。
本年5月にGoogleがAndroidアプリ開発の公式言語として追加することを発表したことが話題となり、
ニーズが急上昇していると考えられます。

第4位　「Swift」（562万円）

ビズリーチ調べ
https://jp.stanby.com/media/programming_ranking2017/

##言語別単価【２０１８年時点】
第1位　「Go」（600万円）　前回ランク外
C言語の置き換えとして、Dockerなどの基盤ソフトウェアの開発で採用され、
ツールの開発やWebサーバーでの活用など、さまざまな分野で利用されています。
2018年のStack Overflowの年次レポートでも、
最も愛されるプログラミング言語・スクリプト言語・マークアップ言語の5位にランクインしており*1、
世界で人気の言語です。
学習の容易さと実用性の高さから開発者の間で急速に人気が上昇していると見られ、
国内でもインターネット企業を中心に普及しています。
求人数は昨年比で1.9倍に増加しており、今後もさらに注目されることが予想されます。

第2位　「Scala」（600万円）　前回１位
高い生産性と堅牢性を実現し、オブジェクト指向言語と関数型言語の特徴を併せ持った言語で、
米Twitterや米LinkedInなどが利用していることで知られます。
国内でもインターネット企業で「Scala」の採用企業が増えているのに対し、
現在も扱える人材が少ないことから年収が高い言語といわれています。

第3位　「Python」（575.1万円）　前回２位
研究機関の研究者やデータサイエンティストによく利用されており、
機械学習や統計分析の活用が進むなか、さらに需要が高まると見られます。
また、「Python」の求人数は昨年比で1.7倍に増加しています。

第4位　「Kotlin」（575万円）　前回３位
昨年比で求人数が5.3倍に増加しています。
昨年5月にGoogleがAndroidアプリ開発の公式言語として追加すると発表したことが話題となり、
ニーズが急上昇したためと思われます。「Kotlin」は、Androidアプリだけでなく、
Webサービスの開発でも採用事例が増えてきており、また「Java」の既存のライブラリを利用できるため、
「Java」に代わる新たな言語として、さらに需要が高まると見られます。
一方、「Java」の求人数は34,000件と多いものの、昨年比では3割減少しています（年収中央値は500万円で14位）。

第5位　「TypeScript」（575万円）　前回ランク外
「JavaScript」を拡張したもので、静的型付け言語のため堅牢なコードを書くことができ、保守運用がしやすい言語です。
機能分割がしやすいため、大規模アプリケーションのチーム開発に適しており、
Webサービスのフロントエンドなどでも広く利用されています。
2017年4月にGoogle社内の標準言語の一つとして採用されたことから、
導入する企業が増えており、求人数は昨年の3.2倍に増加しています。

ビズリーチ/スタンバイ調べ
https://www.bizreach.co.jp/pressroom/pressrelease/2018/0807.html



##FizzBuzzのプログラム


##Python

```py
for i in range(1, 31, 1):
    printStr = str(i) + ":"
    if i % 3 == 0:
        printStr = printStr + "Fizz"
    if i % 5 == 0:
        printStr = printStr + "Buzz"
    if i % 3 != 0 and i % 5 != 0:
        printStr = printStr + str(i)
    print(printStr)
```

###FizzBuzz クラスを作ってみた

```py
class FizzBuzz:
    def __init__(self, lastIndex):
        self.lastIndex = lastIndex
    def __concatStr(self, str1 : str, str2 : str) -> str:
        return str1 + str2
    def printFizzBuzz(self):
        for i in range(1, self.lastIndex + 1, 1):
            printStr = self.__concatStr(str(i), ":")
            if i % 3 == 0:
                printStr = self.__concatStr(printStr, "Fizz")
            if i % 5 == 0:
                printStr = self.__concatStr(printStr, "Buzz")
            if i % 3 != 0 and i % 5 != 0:
                printStr = self.__concatStr(printStr, str(i))
            print(printStr)
 
fizzBuzz = FizzBuzz(30)
fizzBuzz.printFizzBuzz()
```

##Kotlin
```kotlin
fun main(args: Array<String>) {
    for(i in 1..30){
        var fizzBuzzResult = ""
        fizzBuzzResult += if(i % 3 == 0) "Fizz" else ""
        fizzBuzzResult += if(i % 5 == 0) "Buzz" else ""
        fizzBuzzResult += if(i % 3 != 0 && i % 5 != 0) i else ""
        println("${i}:${fizzBuzzResult}")
    }
}
```

##Swift
```swift
for i in 1...30 {
    var fizzBuzzResult:String = ""
    if i % 3 == 0 {
        fizzBuzzResult += "Fizz"
    }
    if i % 5 == 0 {
        fizzBuzzResult += "Bizz"
    }
    if i % 3 != 0 && i % 5 != 0 {
        fizzBuzzResult += "\(i)"
    }
    print("\(i):\(fizzBuzzResult)")
}
```

| |Python|Swift|Kotlin|
|---|---|---|---|
|開発時期|1991年|2014年|2011年|
|時代背景（歴史）|Python開発者が関わっていたプロジェクトでの教育用プログラミング言語であるABCが実用的ではないため、より実用的な言語を目指して開発された。|これまで使用していたネイティブアプリ開発用言語「Objective-C」に代わる新たな言語として場。従来、Apple社が提供するOSXやIOS用ネイティブアプリ開発に採用されていたObjective-Cは1983年の誕生からすでに30年以上も経過しており、現代的でモダンなプログラミング言語を使用してアプリを開発したいという思惑からSwiftは誕生した。|Javaが持つ後方互換性という制約を取り除いた形で、以下のような目標を達成すべく、新たな言語として生み出された。・Javaとの互換性・Javaと同等のコンパイル速度・Javaよりも簡潔・Javaよりも安全|
|元となった言語との比較|ABC、C教育用言語のABCの分かりやすさと、C言語の構文をあわせもっている。|元となっているObjective-Cと比較すると、main()関数がないことや、改行がステートメントの終わりとして扱われることでセミコロンがいらない。スッキリ見える！！！|Java|
|特徴（実際の使用用途）|人工知能や機械学習の分野でよく使われているプログラミング言語なぜ人工知能で使われているのか・ライブラリが充実（数学・解析系も）    →同じ統計用言語のR言語と比べると・初心者が参入しやすい（Pythonの元となった言語が教育用言語だったため）・R言語がカバーしているのはマニアックな解析で、大抵Pythonで事足りる・コンパイルしなくていいので、コーディング→結果確認がすぐにできて研究に向いている・大量のデータを扱う分野では型の意識をしなくていい動的型付け言語のほうがコーディングが楽。大量のデータにいちいち型を考えていられない。→静的型付けのC言語よりも実行速度は劣るが、コーディングが楽で、コーディング→結果確認までのスパンで考えるとPythonのほうが早い。|Mac OS XやiOS（iPhone、iPad）のアプリを作成するために新しく開発されたプログラミング言語|Javaをプラットフォームとしたプログラミング言語|
|（言語の特徴）|インデントを正確に行う必要がある|型エイリアス（型の名称を変えることができる）型推論で安全|・Java との相互運用性（Kotlin から Java を呼び出すことも、Java から Kotlin を呼び出すこともできる）・スクリプトとしても実行可能・JavaScriptにも変換できる|
|開発環境の違い|EclipseやIntelliJなどのIDEでも動かせるので、使いなれたツールで開発することも可能。もちろんPython専用のエディタもある。|Appleでは、iOS、OS X、watchOS、tvOS、Linux向けのコードをコンパイルできる、OS XとLinuxのためのバイナリを提供しています。」|Android Studio 3.0では、Kotlin開発用のプラグインが最初から組み込まれている|
|今後の発展性|文法的に定まった形式で書かないとコンパイルが通らないため、スキルが異なるレベルのエンジニアがコーディングをしても、同じように記述されるので、仮想化環境等の設定技術言語として採用されてきている。・C言語より少ない行数で書ける・コンパイルの必要が無い・スキルレベルによらず同じようにコーディング出来ることを目指している→誰が書いたコードでも同じように読めるコーディングの幅がない|Java開発元のOracle社とGoogle社が現在著作権問題で争っており、Google社はアプリ開発にSwift導入を検討している。現在Javaで作られているAndroidアプリがSwiftで作成できるようになると、企業は必然的にSwiftを学ばざるを得ない状況になると考えられる。今後の動向に注意！！！！|米Googleは5月17日（現地時間）、年次開発者会「Google I/O 2017」の基調講演で、Androidの正式開発言語として「Kotlin」を採用したと発表Null Safety（ヌル安全を保証）行末のセミコロンが省略可能クラスなしで関数を定義可能型宣言がやや独特（「型 変数名;」のように、型名を先に書くCやJavaなどと異なり、Kotlinでは「: データ型」のように後ろに型名を記す記法）関数定義は「fun」変数宣言に「var」と「val」がある（「var」では書き換え可能な変数を宣言し、「val」では変更不可の変数を宣言）|
|参考URL|・https://blog.codecamp.jp/technology_01<br>・https://mayonez.jp/topic/1555<br>・https://ja.wikipedia.org/wiki/Python<br>・https://de-liker.com/why-Python-is-better-way-for-developing-ai.html<br>|・https://mayonez.jp/topic/1198<br>・https://beginner-programmer.com/2017/08/23/swift/<br>・https://thinkit.co.jp/article/12089<br>・https://www.apple.com/jp/swift/<br>|・http://www.atmarkit.co.jp/ait/articles/1604/01/news032.html<br>・http://www.itmedia.co.jp/news/articles/1705/18/news067.html<br>|