将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察
The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...
RubyとPythonは解釈的にも動的型付け的にも素晴らしいプログラミング言語だ。その用途や人気、コミュニティについては、このブログのエントリーのひとつで読むことができる。これらの言語には多くの共通点がありますが、多くの相違点もあります。今回はそのいくつかを紹介しよう。
これらの言語が動的型付きインタプリタ言語という同じカテゴリーに含まれる以上、類似していることは間違いない。
両方 Python とRubyは動的型付け言語である。そのため、プログラマーは変数の型を指定しながら コード.変数の型はプログラムの実行中に決定され、変更されることもある。変数の型は、変数に格納されている値から導かれる。以下のコードはこれらの言語で正しく実行される:
変数 = 1
変数 += 2.5
変数 = 'サンプル文字列'
変数 = [2, 3.5, 'サンプル文字列'] 変数 = [2, 3.5, 'サンプル文字列'
これは、とりわけ上記の点と関連している。型を宣言したり、ステートメントをセミコロンで終わらせたりする必要がなく、またスクリプト言語であるため、書くのも読むのも簡単である。よく書かれたコードは、これらの言語に触れたことのない人でも読むことができる。
対話型のコンソール・インタープリターがある
簡単な操作やコードの一部をテストしたいとき、ファイルを作成して特別なコマンドを使ってコードを実行する必要はありません。RubyにもPythonにも対話的なコンソールインタプリタ(REPL)がある。Pythonの場合、このようなインタプリタを次のコマンドで実行できます。 パイソン
(またはパイソン3
)、Rubyの場合は例えばこうなる、 irb:
$ irb
2.5.8 :001 > 結果 = 2 + 1
=> 3
2.5.8 :002 > 結果 += 3.5
=> 6.5
これらは異なるものである。 プログラミング言語もちろん、両者には違いがあるに違いない。Pythonとルビーの場合、その違いは数多くある。その中でも特に重要なものをいくつか紹介しよう。
Pythonではインデントが非常に重要です。すべてのコードブロックはインデントによって定義されます。与えられたブロックの各行が同じインデントであることが重要です。そうでないと、コードを実行しようとしたときにIndentationErrorが発生します。Rubyでは異なるアプローチを取る。ここでは、コードブロックはキーワードによって制限される。冒頭の単語(たとえばbegin、if、class、def
と語尾に 終了。
コードブロック内でコードがどのようにインデントされているかは問題ではない。
オブジェクト指向プログラミングの基本機能のひとつ。正しい使い方をすれば、驚異的な働きをする。Pythonはマルチベース継承をサポートしている:
example.py
class ClassA:
def callA(self):
print('callA')
クラス ClassB:
def callB(self):
print('callB')
クラスClassAB(ClassA, ClassB):
パス
class_inst = ClassAB()
class_inst.callA()
class_inst.callB()
その結果、こうなる:
$ python3 example.py
callA
callB
Rubyはデフォルトでは<演算子を使った単一ベース継承しかサポートしていない。しかし、モジュールを使って多塩基継承をシミュレートすることは可能です:
example.rb
class ClassA
def calla
puts 'calla'
終了
終わり
モジュール ModuleB
def callb
puts 'callb'
終了
終了
クラスClassAB < クラスClassA
include ModuleB
終了
classinst = ClassAB.new
classinst.calla
classinst.call_b
何が我々に与えてくれるのか:
$ ruby example.rb
call_a
call_b
含む
はRubyで利用可能なミキシンのひとつに過ぎない。ミキシンはクラスに追加機能を持たせるためのものです。Rubyには3つのミキシンがある。
私たちが 含む
をクラス定義に使うと、含まれるモジュールはこのクラスの直接の祖先になります。これは、モジュールのすべてのメソッドがこのクラスのインスタンス・メソッドになることを意味します。クラスでそれらをオーバーライドしたり、(モジュールで定義された)オリジナルのメソッドを スーパー
というキーワードがある。
example.rb
モジュール ModuleA
def print_something
puts 'モジュールからのメッセージ'
end
終わり
クラス ClassB
インクルード ModuleA
def print_something
puts 'クラスからのメッセージ'
スーパー
end
終了
ClassB.new.print_something
結果
$ ruby example.rb
クラスからのメッセージ
モジュールからのメッセージ
ほとんど同じように機能する 含む
しかし、前置されたモジュールはクラスの直接の子孫になります。つまり、クラスでモジュールのメソッドをオーバーライドすることはできませんが、モジュールのメソッドはスーパー
というキーワードがある。
example.rb
モジュール ModuleA
def print_something
puts 'モジュールからのメッセージ'
スーパー
end
終了
クラス ClassB
ModuleA を追加する
def print_something
puts 'クラスからのメッセージ'
end
終わり
ClassB.new.print_something
結果
$ ruby example.rb
モジュールからのメッセージ
クラスからのメッセージ
モジュールで定義されたメソッドがクラスのクラス・メソッドになることを除けば、includeと似た働きをする。
結果
$ ruby example.rb モジュールからのメッセージ
Pythonには関数がある。Rubyはメソッドしかサポートしていない。それは何を意味するのか?とりわけ、Pythonは関数を変数に保持し、それを別の関数の引数として渡すことができる。Rubyでは、そんな簡単なことはできない。これも括弧が関係している。Pythonで引数のない関数、あるいはデフォルトの引数を持つ関数があった場合、その名前を括弧なしで使うと、その関数が返されます。括弧を付けるだけで関数が実行されます。Rubyでは、括弧なしで関数を呼び出すことができます:
example.py
def inner_function():
print('内部関数')
def wrapper_function(function):
print('ラッパー関数')
#関数は、関数オブジェクトを含む変数です。
function() #の内部関数はここで呼び出されます。
wrapperfunction(innerfunction)
結果
$ python3 example.py
ラッパー関数
内部関数
ルビーで:
example.rb
def inner_function
puts '内部関数'
終了
def wrapper_function(function)
puts 'ラッパー関数'
関数
終了
wrapperfunction(innerfunction) # inner_functionはここで呼ばれます。
結果
$ ruby example.rb
内部関数
ラッパー関数
もちろん、この場合はRubyでいくつかのトリックを使えば、望みの効果を得ることができる。まず、Procオブジェクトを使う:
example.rb
def inner_function
puts '内部関数'
終了
def wrapper_function(function)
puts 'ラッパー関数'
function.call
終了
func = Proc.new { innerfunction }.
wrapperfunction(func)
結果
$ ruby example.rb
ラッパー関数
内部関数
つ目のアプローチは、ブロックを使うことだ:
example.rb
def inner_function
puts '内部関数'
終了
def wrapper_function
puts 'ラッパー関数'
yield
終了
wrapperfunction do
innerfunction
終了
結果
$ ruby example.rb
ラッパー関数
内部関数
これは非常に便利なPythonの機能である。これは、別のリストを基にリストを作成する機能である。数字のリストが与えられたら、奇数の2乗のリストを作る。Pythonではリスト内包を使う:
numbers = [1, 3, 4, 7, 8, 12, 15].
result = [num*num for num in numbers if num % 2].
利点は、メモリ上に2つのリストしかないことだ。
Rubyでは少し事情が異なる。この課題を解決する方法はいくつかある。その中で最も読みやすいものを紹介しよう:
ナンバーズ = [1, 3, 4, 7, 8, 12, 15]
result = [] (結果)
numbers.each { |num| result << num * num if num.odd?}
見ての通り、それは可能だが、Pythonほどエレガントではない。
Rubyでは、すべてのクラスはミュータブルです。どういう意味か?組み込みのクラスであっても、すべてのクラスのメソッドを追加したりオーバーライドしたりすることができる。例えば、文字列中のすべての文字anをbに変更するメソッドが欲しいとしよう。それは簡単な方法でできる:
example.rb
クラス String
def atob!
self.gsub!(/a/, 'b')
終了
終わり
string = 'a文字が多い文字列の例'
文字列を置く
文字列.atob!
文字列を置く
結果
$ ruby example.rb
a文字が多い文字列の例
b文字が複数ある文字列の例
ウェブ開発 は、常に様々なものを取り入れ、形にしていくダイナミックな分野である。 プログラミング言語 をそのニーズに合わせて選ぶことができる。この分野で人気のある2つの選択肢は Pythonプログラミング言語 とルビー。どちらも、その価値は ウェブアプリケーションの構築 などがあり、それぞれに利点と欠点がある。
Python は 高水準プログラミング言語 そのシンプルさと コードの可読性初心者のプログラマーには魅力的な機能だ。その Pythonプログラミング言語 は汎用性が高く、さまざまな作業に使用できる。この 汎用プログラミング言語 は機械学習やビッグデータなどの分野でよく使われる、 ウェブ開発.幅広い Python開発者コミュニティ ライブラリやフレームワークの豊富なエコシステムに貢献し、次のような用途に適している。 ウェブアプリケーションの構築.Django、Flask、Pyramidなどがある。 Python ウェブフレームワーク が活用した。 ウェブ開発者 世界中に。
一方、ルビーはもう一人の 高水準汎用プログラミング言語その柔軟性と表現力が光る。この オブジェクト指向プログラミング言語 のバックボーンとなっている。 ウェブアプリケーション.Rubyの魅力は、次のことを容易にする能力にある。 ウェブ開発 を通して Railsフレームワークのための強力なツールである。 ウェブアプリケーションの構築 急速に。
Rubyは Pythonを誇る。 ルビー・コミュニティ そのため、多くのライブラリーやツールを継続的に開発・維持することで、選手たちの経験をより豊かなものにしている。 ウェブ開発者 この言語を使ってこの言語は オブジェクト指向言語Rubyは、そのエレガントさと、クリーンで読みやすいコードで評価されており、小規模なものから大規模なものまで、Rubyを選択するのに適しています。 ウェブアプリケーション.
Python とルビーは、次のように オブジェクト指向プログラミング言語多くの共通点がある。また、以下の点も共通している。 関数型プログラミングプログラマーに様々なスタイルでのコーディングを提供する。 Pythonコード特に、そのわかりやすい構文が高く評価されている。 可読性.
それぞれの言語には強みがある; Pythonの 多用途で幅広い コミュニティ をサポートしているため、様々なタスクに対応できる優れたツールとなっている。 Railsフレームワーク の有力候補となる。 ウェブアプリ 開発.のユニークなニーズと嗜好である。 ウェブ開発者 を決定する。 言語 彼らのために プロジェクト.
の領域では オペレーティングシステムどちらの言語も素晴らしいポータビリティを発揮し、以下のような多くのタスクに適している。 ウェブ開発.したがって、この決闘で決定的な「勝者」を宣言するのは難しい。
一方 Pythonプログラミング言語 より広いリーチと規模を持つ コミュニティRubyの能力を過小評価してはならない。これらの言語を完全に理解するためには、これらの言語を深く掘り下げ、その複雑さを理解し、最も輝くところに適用しなければならない。あなたが ウェブアプリケーションの作成 と Python またはルビー、それぞれ 言語 は、高品質のサービスを提供するための堅牢なプラットフォームを提供します。 ウェブアプリ.Rubyは、あまり知られていないが、確かに、その世界では正当な評価に値する。 プログラミング言語.