さまざまな言語の「お茶のカップ」

どのプログラミング言語が好きですか? C ++? または純粋なC? または、PythonまたはPHPのスクリプト言語のファンですか?

もちろん、あなたが直面するタスクに依存すると答えます。

いいね 簡単なアルゴリズム-お茶を作る-をさまざまなプログラミング言語で実装してみましょう。

あなたは私に何が起こったかを見ることができます。 実装は完全であると主張せず、結果は異なります。 しかし、ポイントはお茶ではありません-それは言語です! だから...



すぐに予約してください-プログラムは完了していません。 Hello World Collectionは400以上の言語と99のBottles of Beerのために存在しており、その実装はほぼ1000以上あるため、なぜ必要なのですか。 しかし、これらのコレクションの欠点は、プログラミングスタイル自体を非常に弱く反映し、印刷で最大1サイクルにまで要約することです。 もう少し詳しく見てみましょう。



C言語からの伝統(または伝統なし)から始めましょう簡潔に、順番に、そしてフリルなしで、次のコードを取得しました。

<br> #include <stdbool.h> <br><br> #define TEA_OK 0 <br><br> typedef enum _tea_type { <br> TEA_BLACK , <br> TEA_GREEN<br> } tea_type ; <br><br> typedef struct _tea_cup { <br> tea_type type , <br> bool sugar<br> } tea_cup ; <br><br> int drink_tea ( tea_cup * cup ) { <br> return TEA_OK ; <br> } <br>





申し訳ありませんが、詳細に触れず、見出しを強調表示しませんでしたHおよびすべての「茶」パラメータの使用について説明します...しかし、比較するものはありません。



次はC ++です。 ファンがあらゆる種類のローションと抽象化でドライコードを「装飾」するための巨大なクリエイティブスペース。 しかし、あなたが忘れてはならない主なことは、彼がお茶をつかんでそれを奪うことです! (デストラクタとそれらの周りの議論の簡単なヒントでした)

<br> #include <string> <br><br> class TeaCup { <br> public : <br> enum Type { <br> BLACK , <br> GREEN<br> } ; <br> TeaCup ( Type type ); <br> TeaCup ( std :: string sType ); <br> ~ TeaCup (); <br> protected : <br> Type type ; <br> } ; <br><br>TeaCup ::~ TeaCup () { <br> DishWasher :: wash ( this ); <br> } <br>





一見理想的なオブジェクト実装? すべてがその場所にありますか? あった! Javaに注目しましょう。Javaでは、アプリケーションの内部空間を設計し、コードを整理するというエンジニアリングアイデアがまとまりません。 目標は明確です-他のインターフェイスでコードを使用する。

<br>public interface Drinkable { <br> int drink (); <br> } <br><br>public class Boiled { <br> protected bool boiled ; <br> void setBoiled ( bool boiled ); <br> bool getBoiled (); <br> } <br><br>public class TeaCup extends Boiled implements Drinkable { <br> int drink () { <br> return 0 ; <br> } <br> } <br>





そして、私たちはまだTeaCupFactoryを思いついておらず、お茶を入れるためにそれを実装する人を植えていません! しかし、行かないでください...次の行はPythonです。 意味は簡単です。オブジェクトの魔法のメソッドを再定義することで、より良いインターフェースと使いやすさを実現します。 シンプルさと簡潔さ、アンダースコアの暴動。

<br> class TeaCup : <br><br> def __init__ ( self ): <br> self . want = [] <br><br> def __setattr__ ( self , name , value ): <br> if value : <br> self . want . append ( name ) <br><br> def __str__ ( self ): <br> return "Tea: %s" % ( ", " . join ( self . want )) <br><br> def drink ( self ): <br> return str ( self ) <br><br> if __name__ == "__main__" : <br> cup = TeaCup () <br> cup . sugar = True<br> cup . lemon = True<br> cup . drink () <br>





最も便利なインターフェースは判明していませんか? 心配する必要はありません。 もう一度、より正確に判明します。 それともPerlで試してみませんか? コンパクトなコード、言語の豊富な構文、ああ...

<br>use Carp qw ( croak ); <br><br> sub drink_tea { <br> croak "Shit!" if wantarray ; <br> my $type = shift || "black" ; <br> my ( $sugar , $lemon ) = @_ ; <br> croak "What?" unless $type =~ /^ black | green$ / i ; <br> 1 ; <br> } <br>





私の言っていることを理解してくれるといいのですが? どこでもない限り! はい、おそらくパフォーマンスが低下することはありません。 把握するのが難しい場合があります...私の例は、私が本当のPerlプログラマーではないということです。 そして、あなたが故意に何かを積み重ねることができると想像してください? 1つのヒーププロシージャプログラミングとOOPに干渉する悲惨なPHPプログラマーではありません!

<br> set_include_path ( dirname ( __FILE__ ) . PATH_SEPARATOR . "lib" ); <br> require_once ( "tea.cup.php" ); <br>$cup = new Tea_Cup (); <br>$cup -> with_lemon = true ; <br>$cup -> fill (); <br> header ( "Content-Type: tea/black" ); <br> set_time_limit ( 0 ); <br>$cup -> drink (); <br>





もちろん、疑問符の付いた三角形の括弧を忘れてしまいました...まあ、大丈夫です。 しかし、JavaScriptでは、そうではありません。 これ以上。 グローバル変数をローカルに(忘れずに、それらへのアクセスを最適化して)、セミコロンを入れて、コードを大きなファイルに統合することを忘れないでください。

<br> ;( function ( w ) { <br> var d = w . document , g = d . getElementById ; <br> var cup = g ( "tea-cup" ); <br> if (! cup ) return ; <br> if ( cup . className . indexOf ( "black" ) >= 0 ) <br> cup . appendChild ( d . createElement ( "sugar" )) ; <br> cup . style . visibility = "hidden" ; <br> } )( window ); <br>





だから私たちは徐々に終わりに近づいています...少なくともコードは終わりました。 したがって、私はあなたの質問に答えようと急いでいます。



- どうしてこれなの? -さまざまな言語でのプログラミングのスタイルを見てみましょう! タスクに関係なく、頻繁に使用される言語の「チップ」で、プログラムコードを整理するアプローチについて。 もちろん、少し(またはそれ以上)誇張されていますが、それでもです。 ほとんどのPHPコーダーはこのスタイルで書くのではないでしょうか? また、ApacheまたはNginxのソースは同様の方法で編成されていませんか?



- どの言語が優れていますか? -しかし、私はこれを知りません...私はいくつか、より少ないが好きです。 しかし、これは主観的なものです。 結局のところ、主なことはあなたが書くものではなく、あなたがそれをどのように行うです。 そして、結局のところ、仕事は喜びになる可能性があり、すべてが判明します!



UPD:やや「奇妙な」C ++、Java、Pythonをおaびします。 これらの言語での出版において、何かがおかしなミスを犯しました。 解説者に再び感謝します!



All Articles