タグ

ブックマーク / bleis-tift.hatenablog.com (9)

  • バイブルというか、良書および必読の書 - ぐるぐる~

    寝ようと思っていたら、その言語で「バイブル」と呼ばれる書籍を教えてくださいなんて質問を見つけてしまい、書いてたら長くなる長くなる・・・ 言語バイブル - Strategic Choiceが元らしく、いくつかかぶってるけど気にしない方向で。 Java Java言語仕様 第3版 (The Java Series) 何かと便利 Java仮想マシン仕様 (The Java series) 同上 Effective Java 第2版 (The Java Series) Effective なのに Java やるなら必読 Java Puzzlers 罠、落とし穴、コーナーケース Java の落とし穴にはまりたくなければ読むべき Javaプログラミングの処方箋 (Programmer’s foundations) 今となっては内容がちょっと古いけど、十分通用する。Effective の次に読むような

    バイブルというか、良書および必読の書 - ぐるぐる~
  • マナちゃんのやさしいC++とか - ぐるぐる~

    同じくときどきの雑記帖さんから、マナちゃんのやさしいC++について。 このは結構ウソというか、そんな感じの表現が目立つからおすすめはできないなー。 やっぱり初心者にはAccelerated C++がいいと思うな。 ロベールのC++入門講座は持ってないけど、ちょっと立ち読みしたときに「stringクラス」なる表現があったのが気になった。 まぁ、初心者に対してこの程度のごまかしはありだろうけどね。 Accelerated C++―効率的なプログラミングのための新しい定跡 (C++ In Depth Series) 作者: アンドリューコーニグ,バーバラ・E.ムー,Andrew Koenig,Barbara E. Moo,小林健一郎出版社/メーカー: ピアソンエデュケーション発売日: 2001/12メディア: 単行購入: 10人 クリック: 112回この商品を含むブログ (43件) を見る

    マナちゃんのやさしいC++とか - ぐるぐる~
  • ストアドプロシージャ - ぐるぐる~

    ストアドプロシージャはまぁ、いつか必要になる。 でも、ストアドプロシージャの紹介方法は問題ありすぎる気がするんだよなぁ。 例えばこの記事とか。 以下主に愚痴。 ストアドプロシージャ教えるならIF文は必須だよね。でも、SQLで出来ることをわざわざストアドプロシージャ使ってそれを紹介する神経が分からない。 こんな教え方をするから、ちょっと複雑*1なSQL書くと「わかりにくい」やら「効率悪い」やら、意味不明なこと言い出す輩が出てくるんだよ。 例えばSQLのことをよく知らない人が書きがちな以下のコード。 UPDATE SomeTable SET hoge = NULL WHERE piyo = 'D' ; UPDATE SomeTable SET hoge = 3 WHERE piyo = 'U' ; T-SQLをかじってしまったら、カーソル使ってDかUかをIF文とかで分岐させて、UPDATEは一

    ストアドプロシージャ - ぐるぐる~
    maganeba
    maganeba 2008/10/01
  • 第一正規形を破っているテーブルの集計 - ぐるぐる~

    例えばアンケート結果で、複数の結果を格納する可能性がある場合に、何を血迷ったかスペース区切りで文字列として格納するようなテーブル設計をやる人がいる。 cid*1 enq_id answers 1 1 1 3 1 2 2 1 1 2 3 2 2 10 ・・・ ・・・ ・・・ こんな感じ。 今日(昨日か)ちょうど、こんなテーブルでアンケート項目一つ一つの合計を求めることが出来ないか相談されたので、こんなSQLを書いた。 SELECT enq_id , sum(CASE WHEN answers = '' THEN 1 ELSE 0 END) AS none , sum(CASE WHEN answers = '1' OR answers LIKE '1 %' THEN 1 ELSE 0 END) AS ans_1 , sum(CASE WHEN answers LIKE '%2%' THEN

    第一正規形を破っているテーブルの集計 - ぐるぐる~
    maganeba
    maganeba 2008/09/30
  • Pimplイディオム - ぐるぐる~

    読書会で「C++は循環参照の記述が困難なところが・・・」という話題があったけど、その場はPimplイディオムという言葉のみを紹介しておいた。 ということで補足を。 まず、問題となるコードはこんな感じ。 // hoge.h #pragma once #include "piyo.h" class hoge { piyo p; }; // piyo.h #pragma once #include "hoge.h" class piyo { hoge h; }; このコードはどうがんばってもコンパイルできない。 なぜなら、hogeをコンパイルする為にはpiyoが必要で、piyoをコンパイルする為にはhogeが必要だから。 これを、Pimplイディオムを使用して回避するとこんな感じになる。 // hoge.h #pragma once class hoge { // hogeクラスのprivate

    Pimplイディオム - ぐるぐる~
    maganeba
    maganeba 2008/09/27
  • ファイナライザ、デストラクタ - ぐるぐる~

    読書会で話題に上がったけど、この辺の用語は言語によってまちまちで、かなり紛らわしい。 その場ではファイナライザとデストラクタは別物だよ、と言っただけなんで、補足を。 まずは、言語ごとに何を持っているのかの表を。 言語 ファイナライザ デストラクタ Java あり なし C# なし あり C++ なし あり ただし、C#のデストラクタはC++のデストラクタ*1より、Javaのファイナライザ*2と同じような意味を持つため、 言語 Javaでのファイナライザ相当品 C++でのデストラクタ相当品 Java あり なし*3 C# あり*4 あり*5 C++ なし あり となる。 実際、C#でデストラクタを記述すると、以下のように記述したのと同じ意味となる。 protected override void Finalize() { try { // デストラクタの中身 } finally { base

    ファイナライザ、デストラクタ - ぐるぐる~
  • スーパークラスのフィールドへのアクセス - ぐるぐる~

    読書会で、抽象クラスのフィールドはデフォルトで protectedにする privateにしてprotectedなgetter/setter*1を用意する のどちらがいいか、という話があった。 昔は後者を好んで使用していたけど、最近はとりあえず前者を使うことが多い。なんたって手軽だし。 で、前者の問題として、そのフィールドが何者か分かりにくい、という点があげられる。 これの解決方法として、スーパークラスのフィールドにアクセスする際には、明示的にsuper*2をつけてアクセスするという方法を採用している。 例えば、 // Java版 abstract class Hoge { protected int i; } final class HogeImpl extends Hoge { void method() { System.out.println(super.i); } } // C#

    スーパークラスのフィールドへのアクセス - ぐるぐる~
  • RAII - ぐるぐる~

    詳しい文脈は忘れてしまったけど、読書会で「C++はデストラクタが弱い」的な話題があがった。 その場はRAII*1使えばいいよ、とだけ言って概要のみ説明しただけだったので補足を。 まずは、RAIIの実例を知ってもらう為に、簡単なサンプルの紹介から。 void write_to_file(const std::vector<std::string>& vec) { std::ofstream fout("out.txt"); std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(fout, "\n")); } このプログラムでは、ファイルストリームのオープンもクローズも明示的に行っていないにもかかわらず、どちらも正しく行われる。 これは、コンストラクタ内部でオープンを行い、デストラクタ内部でクローズを行うことで

    RAII - ぐるぐる~
    maganeba
    maganeba 2008/09/26
  • プログラミング言語XSLT - ぐるぐる~

    プログラミング言語XSLTの特徴 関数型言語 チューリング完全 引数はすべてキーワード引数 データ構造はすべて木構造(というかXML) 入力データに起動するプログラムを記述する必要がある*1 C++templateよりも遥かに冗長な構文 DSL(XPath)の力を借りないとほとんど何も出来ない中途半端さ では早速、Hello, world!を表示するありきたりな例から。 <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version = "1.0"> <xsl:template match="/"> Hello, world! </xsl:template> </xsl:stylesheet> これだけでは何も出来ないので、呼び出

    プログラミング言語XSLT - ぐるぐる~
  • 1