タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

PythonとRubyとprogrammingに関するraimon49のブックマーク (44)

  • 言語女子会2: varは必要?/privateがない? - 西尾泰和のはてなダイアリー

    言語女子会: undefとnullは両方必要?の続編です。 varは必要なの? とあるプログラミング言語が集う女子会にて: Python: JavaScriptちゃんってさ、なんでvarだらけなの? JavaScript: えっ、変? Python: varなんかいらなくない?私ぜんぜん持ってないよ? JavaScript: えー、じゃあ変数をどうやって宣言するの? Python: 宣言っていうか…「x = 1」みたいな代入文があれば変数xが必要なのって自明じゃない?宣言とか必要? Ruby: 必要ないよね。っていうか変数宣言とか古臭くない? JavaScript: そうかなー。 Python: 少しダサイかも。ほら断舎離ブームだし要らないものは捨てなきゃ! JavaScript: 要らないかなぁ、変数宣言。Pythonちゃんは関数がネストしているときに外側のスコープの変数に代入するのって

    言語女子会2: varは必要?/privateがない? - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/03/22
    リフレクションを持ち出されたらJavaちゃんのprivateすらも逃げ出すしかない…。
  • 言語女子会: undefとnullは両方必要? - 西尾泰和のはてなダイアリー

    Twitterのタイムラインが面白すぎて、ついうっかり言語を擬人化して脳内で言語女子会なるものを開いてしまいました。なお、登場人物と実在の人物は1対1に対応しません。 undefinedとnullの両方必要なの? とあるプログラミング言語が集う女子会にて: Perl: そういえばさ、なんでJavaScriptちゃんってundefinedとnullの両方もってるの? JavaScript: えっ、未定義の変数にアクセスした時undefined返したいじゃない? Python: 例外投げて死ねばいいじゃん Ruby: 例外投げて死ねばいいよね Python & Ruby: ねー♡ Java: いやそこは参照型ならnull、数値型なら0で初期化すべきでしょ C: これだから最近の若い子は…初期化にだってコストが掛かるんだからね!デフォルトで初期化するなんて無駄遣いよ!必要な人だけが責任をもって初

    言語女子会: undefとnullは両方必要? - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/03/17
    凄く面白い。ブレずにKeyError投げて死にまくるPythonちゃん最高やでえ。
  • PythonからRubyへ

    Pythonは、Rubyと同様、とてもよくできた汎用的なプログラミング言語です。 PythonからRubyへやってきたなら、Pythonよりもほんの少しだけ構文が多いことに気づくでしょう。 Pythonとの類似 Pythonと同様に、Rubyは… irbと呼ばれる対話型の実行環境があります。 コマンドライン上でドキュメントを読めます (pydocの代わりにriコマンドを使います)。 通常の改行を除いて、特殊な行区切りはありません。 Pythonにおける三重引用符のように、文字列リテラルを複数行に記述できます。 角かっこはリストを示すために使われ、 波かっこは辞書(Rubyではハッシュと呼ばれます)を表すために使われます。 配列は同じように機能します( 要素を追加すれば配列は大きくなっていきます。 a3 = [ a1, a2 ]のように書けば配列の配列を作って、 それらを構造化することもでき

    raimon49
    raimon49 2012/02/02
    類似点と相違点。PerlやPHPとの比較も面白い。→ http://www.ruby-lang.org/ja/documentation/ruby-from-other-languages/
  • 他の言語に慣れた人がRubyを使ったときにつまずきがちな9つのポイント - 西尾泰和のはてなダイアリー

    他の言語に慣れた人がPythonを使ったときにつまずきがちな9つのポイントの続編。ささださんも書いています see: だいありー 0は真, 空文字列も真 C言語などと違って、0は偽ではない。PythonJavaScript, PHPと違って空文字列も偽ではない。 >if 0 then print "true!\n" end true! > if "" then print "true!\n" end (irb):1: warning: string literal in condition true! 括弧がなくても0引数での関数呼び出しが起きる PythonJavaScriptでは式中に現れた関数名は関数を指す。しかしRubyでは0引数での呼び出しが行われる。 # Python >>> def foo(): print "foo!" ... >>> foo <function foo

    他の言語に慣れた人がRubyを使ったときにつまずきがちな9つのポイント - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/01/28
    真偽評価やクラス宣言で拡張してしまうところは、つまづきと言うかRubyの哲学を感じさせる部分
  • 他の言語に慣れた人がPythonを使ったときにつまずきがちな10のポイント - 西尾泰和のはてなダイアリー

    今日質問されて、以前Twitterで書いたのを思い出して、そして検索性が悪くて見つけ出すのに苦労した。こちらに転載しておく。詳細は気が向いたときに埋める。 オプション引数の評価タイミング Rubyではオプション引数は関数が呼ばれるたびに評価される。 def foo() print "foo!" end def bar(x=foo()) end bar #=> foo! と出力される bar #=> foo! bar #=> foo! Pythonでは関数の定義時に1回だけ評価される。 def foo(): print "foo!" def bar(x=foo()): pass #=> foo!と出力される bar() #=> 何も出力されない bar() 「引数が省略されたら今の日時」みたいな毎回評価したい場合はデフォルト値をNoneにしておいて「Noneだったら=省略されていたら」のif

    他の言語に慣れた人がPythonを使ったときにつまずきがちな10のポイント - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/01/26
    あるある集。nonlocalキーワードが使えない2.x系でのinner()側からの参照はリストを使う。1つのタプルに(1,)カンマが必要というのは意識していなかった。
  • 詳細 ECMA-262-3 第7章1節 OOP: 概説 - mixi engineer blog

    おはようございます。「 Dmitry 先生、言いたい放題」のコーナーへようこそ。大形尚弘です。 今回は最長、そして ECMAScript をどっかに忘れた Dmitry 先生が、オブジェクト指向というものを一般より一段抽象化したレベルから語ります。 誰あろう私がそうなのですが、オブジェクト指向や、その他の何であれプログラミングパラダイムを学ぶとき、大抵そのパラダイムを代表する実装や言語をベースに学習します。すると、パラダイム自体への理解が、その実装の制約に縛られることが多々あると思います。 私は主に ActionScript2/3 でオブジェクト指向を学習しましたので、 JavaScript は「オブジェクト指向言語では無い」と思ってしまっていたことがあります。これはこの章をお読みいただければ分かるとおり、全くの間違いです。正確に表現するならば、オブジェクト指向のための「理論的糖衣」が A

    詳細 ECMA-262-3 第7章1節 OOP: 概説 - mixi engineer blog
    raimon49
    raimon49 2012/01/20
    メッセージ応答性がプロトタイプベースモデルの特徴、カプセル化は隠す目的のために隠すのではない、など。長いけど勉強になった。
  • inforno :: Python,Rubyの言語内DSL構築力:PythonでRakeをまねる場合を例に

    Python で Rake を真似るとしたら という反応を頂いたので、それにまつわるお話を。 まず、CodeReposにコミットしてあるtasktoolsは distutils及びsetuptoolsを拡張する ということを念頭に置いています。ですのである程度distutils.core.Commandの思想というか、インターフェイスを残しています。 タスクをクラスで定義すること オプションの定義方法 sub_commands や finalize_options といったメソッド などなどは元のまんまです。 じゃあ、 distutils や setuptools を抜いて好きにRakeをPythonで真似るとしたら、というのが今回メインのお話。最初にこんな感じでコマンドを定義しますよ、というのを出してしまいます。 1from __future__ import with_statemen

  • all()とany()は意外と使える子かもしれない。 - podhmoの日記

    組み込み関数の中の使えない子 pythonの組み込み関数の中に以下の3つがあります。 reduce() all() any() これらの3つを組み込み関数のわりに使いどころが少ない。使えない子たちだと認識してました。 例えばall()、any()は、各シーケンス*1内の真偽値について、名前から推測できなそうな処理を行い、結果を真偽値で返すのですが all([True,True,True]) # => True all([True,True,False]) # => False any([True,True,False]) # => True any([False,False]) # => False 比較関数を引数として渡すことができません。sortedやsortなどの関数は、比較関数を引数として取れるのに不思議なものです。リスト内の全ての要素に対して評価を与えてその結果を真偽値として欲し

    all()とany()は意外と使える子かもしれない。 - podhmoの日記
    raimon49
    raimon49 2011/12/14
    map()を余り使わないところを出発点として気付くこと。reduce()さん…。
  • C#/Scala/Python/Ruby/F#でデータ処理はどう違うのか?

    ■概要 以前、C#でのデータ処理について解説した。今回は、同様のデータ処理を、C#以外のプログラミング言語ではどうしているのか、(C#も含めて)以下の5つの言語を比較しながら説明していく。 C# Scala Python Ruby F# 結果としてできることは似ているのだが、その内部的な実装方法は言語ごとにさまざまである。 ■データ処理のおさらい 概念的には、「データ処理」というのは、Figure 1に典型例を示すように、条件選択や変換など、小さな処理単位に分けて、それをつないでいく形を取る。

    C#/Scala/Python/Ruby/F#でデータ処理はどう違うのか?
    raimon49
    raimon49 2011/07/23
    mix-in, yield, 多重ループで値集合を生成する式の比較。濃い…。執筆者さんのフォロー記事も。http://bit.ly/no8Egb
  • PHP5.4とScalaのトレイト比較 - なんたらノート第三期ベータ

    PHP5.4にはトレイトという文法が導入されて、多重継承の便利さが享受できるようになるそうです。 いろいろ試してみることにしました。 トレイトといえば代表選手はScalaですね。Scalaでいうトレイトは、インターフェースの定義とメソッドの実装を同時にやってくれる便利な概念でした。単一継承のOOP言語では「〜は〜の一種」という制約が強すぎて、「ペンギンは鳥の飛行メソッドによって飛行できてしまう」という問題があります。でもちゃんと「ペンギンは飛べないが泳げる鳥」を綺麗に解決する必要はあって、その解答として、トレイトのあるScalaではこんな解が導けます。 abstract class Animal abstract class Bird extends Animal { def hasBeak = true // 鳥にはかならずクチバシがある def hasWings = true // 翼

    PHP5.4とScalaのトレイト比較 - なんたらノート第三期ベータ
    raimon49
    raimon49 2011/07/11
    実はPHPのtraitはScalaのtraitよりもRubyのmix-inに近かったという話。
  • Pythonのリスト内包表記でRubyのuniqメソッドと同じ事をする - logging.info(self)

    動機 設定値の重複を削るためににスクリプトを組んだのだけど、Pythonだとループで回して新しい配列に突っ込んでとかやらないといけないっぽいので面倒臭いエレガントじゃない。 一応Pythonで単純に書くと以下のようなコードになると思います。 a = [1,3,4,2,3,5] b = [] for v in a: if v not in b: b.append(v) print b # [1, 3, 4, 2, 5] RubyはArray.uniqを作った そんなこんなでRubyだとuniqという重複を取り除くメソッドがあるのでこちらを使って処理しました。 コードは [1,3,4,2,3,5].uniq # [1, 3, 4, 2, 5] で、どう見てもこっちの方がエレガントです。 一方Pythonでは listから重複削除というのはどうも無いらしくlist→set→listへキャストすれ

    Pythonのリスト内包表記でRubyのuniqメソッドと同じ事をする - logging.info(self)
    raimon49
    raimon49 2011/02/05
    ソート済みuniqなリストが欲しいとき
  • スクリプト言語間における「lexical closure」の違い、それともプログラムの違い? - karasuyamatenguの日記

    Matzさんに「closureの件、結論としては元記事のPerl, Python(+JavaScript), Schemeプログラムがそれぞれまったく別のことをしていただけで、closureの仕様はすべて同じであるということ。」と指摘されたので、もう一度整理してみます。 http://twitter.com/yukihiro_matz/status/26707927087 sumimさんのSmalltalkとRubyの例(http://d.hatena.ne.jp/sumim/20101008)も加えます。 実験内容 言語間でやっていることの相違がないように、できるだけ似たコードにする。 ループでiを0から4まで回す ループブロック内で: iを埋め込んだlexical variable、'localvar'を定義。 localvarを参照したclosureをリストに追加。 5つのclosu

    スクリプト言語間における「lexical closure」の違い、それともプログラムの違い? - karasuyamatenguの日記
    raimon49
    raimon49 2010/12/01
    ブロックスコープと関数スコープの違い
  • Algorithm - 0と1を次々と返す簡単なお仕事 : 404 Blog Not Found

    2010年09月03日05:30 カテゴリLightweight LanguagesMath Algorithm - 0と1を次々と返す簡単なお仕事 ごもっとも。 0と1を次々返す方法 - a2c.get.diary TrueだったらFalseで、FalseだったらTrueにしたい。 なんかそんなことそこかしこで必要で、その為の便利なものが あるのかなぁと思ったんだけど無いぽい Closure 来は一番おすすめなのだが… JavaScript ()が煩わしいが、perlrubyよりは自然。 #!/usr/bin/js var flipflop = function(p){ p = !p; return function(){ return p = !p; }; }; var fl = flipflop(); console.log(fl()); console.log(fl()); c

    Algorithm - 0と1を次々と返す簡単なお仕事 : 404 Blog Not Found
    raimon49
    raimon49 2010/09/03
    真偽値を切り替えるクロージャ 比較
  • Scripting Languages I: Node.js, Python, PHP, Ruby - Hyperpolyglot

    a side-by-side reference sheet sheet one: version | grammar and execution | variables and expressions | arithmetic and logic | strings | regexes | dates and time | arrays | dictionaries | functions | execution control | exceptions | threads sheet two: streams | asynchronous events | files | file formats | directories | processes and environment | option parsing | libraries and namespaces | objects

    raimon49
    raimon49 2010/07/26
    比較, 各言語のドキュメントへのリンク
  • 不完全にしてかなり言葉足らずな比較プログラミング言語学 - 西尾泰和のはてなダイアリー

    プログラミング言語は人が作ったもの。人は誤るもの。なので完璧なプログラミング言語は存在しない。 「人は誤るもの、しかし誤りに固執するのは馬鹿の所業だ。」(キケロ) プログラミング言語も、間違った設計をして、馬鹿でない人がそれを修正することの繰り返しで発展してきた。 というわけで言語間での設計判断のい違いとか失敗した設計とかを収集中。一部抜粋して講義資料に入れるつもりなので他の事例をご存知でしたらぜひ情報をいただけるとありがたいです。 if(x = 0) C言語では代入が式であるためif(x == 0)のつもりでif(x = 0)と書いてしまい、常に偽になってしまう。 x = 0の値はint、条件式はboolでないといけないので型エラーだよ派: Java x = 0は式ではないので条件式に入れたら構文エラーだよ派: Python 条件式にx = 0をいれたらx == 0と解釈するよ派: H

    不完全にしてかなり言葉足らずな比較プログラミング言語学 - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2010/07/25
    Javaって厳格。
  • PythonRecipe

    このページは、Rubyレシピブック (詳細) をPythonで書こうというたくらみです。内容は当たり前のことばかりですが、たまにしかコードを書かない人間は、こうしたことがわからなくてイライラしてしまいます。10行くらいのプログラムならさっと見てさっとかけるようにするのが目標です。 2008年1月21日19:00 ロボットによる荒らし対策を施しました。 レシピブック作成にご協力いただける方がいらっしゃいましたら、最初にユーザー登録をお願いします。 レシピブックを修正する際は、一度ログインをしてください。ログインすると右肩の部分に編集の項目が現れます。 記述方法は、structuredText もしくはreStructuredText でお願いできればと思います。 WEB上の情報 Python クイックリファレンス日語訳 pythonライブラリリファレンス pythonチュートリアル Per

    raimon49
    raimon49 2010/07/07
    Rubyレシピブックのお題をPythonで
  • None is None is None: Pythonによるデザインパターン

    2009年6月5日 Pythonによるデザインパターン 『Rubyによるデザインパターン』(ラス・オルセン著 ピアソン・エデュケーション刊)を読みました。 私はPythonでばっかり遊んでいるのですが、PythonRubyとは基は同じ機能のように見えるので、Pythonによるデザインパターンに翻訳してみようと思います。 まず、デザインパターンの原則から 変わるものを変わらないものから分離する インターフェイスに対してプログラムし、実装に対して行わない 継承より集約 委譲、委譲、委譲 必要になるまで作るな(これは「Rubyによる~」の筆者による) これって、プログラミング全般に通じるものがあるようにも感じます。 Template Method Strategy Observer Composite Iterator Command Adapter Proxy 似た趣旨のブログ tachi

  • "sep".join()は気持ち悪くないよ! - Pashango’s Blog

    "sep".join(list) が気持ち悪い理由 そんなに Array.join がいいのか Pythonの','.join()がキモいと思ってた時代が僕にもありました Pythonの文字列連結(join)にまつわる議論 まとめと考察(2) "".join()が色んなところで話し合われているんですね。 眺めていると「気持ち悪い派」が多数派のようです、主な肯定派はid:methaneさんくらい? みんな気持ち悪いと思うのかぁ・・・ 逆に私は「よく考えてあるなぁ」と感心したんですが・・・ 私も"".join([])を見たときは「???」と思いましたよ、だって今まで見てきた言語とは逆なんですから。 ずっと「なんでだろう・・・?」と思っていたんですが、ある時ひらめきました。 そうか!左辺と右辺の対応をわかりやすくするためだったのか!! それに気づいた時はしびれましたね、同時期に勉強してたRuby

    "sep".join()は気持ち悪くないよ! - Pashango’s Blog
    raimon49
    raimon49 2010/05/18
    右辺の先頭で情報を伝える 読み易さ
  • 西尾泰和のブログ: RubyのyieldとPythonのyieldの違い

    RubyのyieldとPythonのyieldは実は全然違うような気がしてきたので、整理のために書いてみます。 まず、Rubyでeachに相当する物を自分で実装してみました。 # Ruby 1 class Array def my_each self.each{|x| yield x } end end [1, 2, 3, 4, 5].my_each{|x| puts x } これに相当する物をPythonで書くと、実はyieldを使いません。 # Python 1 class Array(list): def each(self, f): for i in self: f(i) def myprint(x): print x Array([1, 2, 3, 4, 5]).each( myprint ) これをもっとRuby 1のコードに近づけて書くと以下のようになります。Pythonには

    raimon49
    raimon49 2010/05/13
    RubyとPythonの関数渡し, イテレータ, ジェネレータを比較。関数ファーストクラスか否かの違い。
  • Collection & Copy - JavaScript 1.7、yieldがわからない

    JavaScript MDC - New in JavaScript 1.7 上記ページでは以下のように使われている。(1行目に確認用のprintを追加した) function fib() { print("START") var i = 0, j = 1; while (true) { yield i; var t = i; i = j; j += t; } } var g = fib(); for (var i = 0; i 今までのJSのスコープの感覚で考えると、iとjは各呼び出しで共用されるため、複数のジェネレーターを生成できず、一度数を進めてしまうと再度使えないように見える。 fibの実行結果は以下。 js> typeof(fib) function js> fib() [object Generator] 実行されず(関数スタートが表示されず)、Generatorのインスタンス

    raimon49
    raimon49 2010/05/13
    >ruby と python の yield は構文は似てるけど別物ですよ。ruby のは JS の apply,call に近いですが、python のは 複数回返せる return (コメント欄より)