2006-10-04 01:00:08

おっPython

テーマ:プログラミング
すぐ傍にあって気がつかないこと

String s = "いっぱい";
s.replaceAll("^い", "お");
System.out.println(s);

これで何が表示されるのかという問題。普通に引っかかってしまいました。

で、JavaだとString.replaceAll()が副作用がないということが、罠だったわけですが、Pythonでも結構よくやるきがするよね。

Rubyだと!を付けたりしますが、Pythonでは「副作用があるメソッドは値を返さない」とう結局実行しなきゃ気付かないガードだし、いっそ関数型チックに副作用がある構文と無い構文を明確に分ける言語って無いのだろうかと考えたりしました。

個人的には、メソッドは副作用があるように見えて、関数は副作用がないように見えますが、
Pythonで書くときはあまりクラスを書かないので、結局副作用ありまくりの関数を良く書いているような。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
2005-06-13 01:50:05

NULLチェック

テーマ:プログラミング

取り出してから呼ぶか、Iterator で呼び出すか

本当は@niftyへ直接コメントを書けばいいのでしょうが、休眠(利用停止)させたIDの復活方法が分からなかったのと、新IDを@niftyの接続サービスを利用しないで取得する方法が分からなかったのでここに書きます。

こういうのもトラックバックになるのでしょうか?


> これなら、

>     overwriteBbsInfo(getIncludeList().iterator());
>
> で呼べるから便利なのだが、最初からそう書けよという話。ただ、話はここで終わらない。List が null のときの処理が必要になったわけだが、すると、

>     private void overwriteBbsInfo(Collection collection) {
>         if (collection == null)
>             return;
>         Iterator it = collection.iterator();
>         while (it.hasNext()) {
>            BbsInfo info = (BbsInfo) it.next();
>             // bbsList に info と一致する要素があれば、
>             // info を使って上書きする。
>         }
>     }

いつのまにかoverwriteBbsInfo()がIteratorではなくCollectionを受け取るようになっていますね。


まあ、自分ならListがnullのときはgetIncludeList()では空のColletionを返すようにします。

これもヌルオブジェクトの最初の一歩とも言えますよね?



 

AD
いいね!した人  |  コメント(0)  |  リブログ(0)
2005-06-07 00:25:58

制限時間10分でプログラミング

テーマ:プログラミング

10分でコーディング

ためしにやってみました。コメントとして書こうとしたら1000文字制限だとかで書けなかった。

トラックバックの練習も兼ねてこっちで書くことに。


ちなみに、EclipseのローカルヒストリーによるとUT含めてジャスト10分(ファイル生成からAllGreen且つリファクタリング完まで)。ただし、最後に例題に合わせて名前を変更したり、フォーマット掛けたりした時間は除いて。


/*
 * 作成日: 2005/06/06
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
package tramp;

import junit.framework.TestCase;

/**
 * @author mar
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
public class Cards extends TestCase {

    public static void assertEquals(String[] expected, String[] actual) {
        assertEquals(expected.length, actual.length);
        for (int i = 0; i < expected.length; i++) {
            assertEquals(expected[i], actual[i]);
        }
    }

    public void testDeal() {
        assertEquals(new String[] { "123" }, deal(1, "123"));
        assertEquals(new String[] { "1", "2", "3" }, deal(3, "123"));
        assertEquals(
                new String[] { "12", "23", "31", "12" },
                deal( 4, "123123123"));
        assertEquals(
                new String[] { "000", "111", "222", "333", "444", "555" },
                deal(6, "012345012345012345"));
        assertEquals(new String[] { "", "", "", "", "", "" }, deal(6, "01234"));
        assertEquals(new String[] { "", "" }, deal(2, ""));
    }

    /**
     * @param numPlayers
     * @param deck
     * @return
     */
    private String[] deal(int numPlayers, String deck) {

        String[] result = new String[numPlayers];
        for (int i = 0; i < result.length; i++) {
            result[i] = "";
        }
        for (int i = 0; i < deck.length(); i++) {
            result[i % numPlayers] += deck.substring(i, i + 1);
        }
        for (int i = 0; i < result.length; i++) {
            result[i] = result[i].substring(0, result[result.length - 1]
                    .length());
        }
        return result;
    }
}


AD
いいね!した人  |  コメント(0)  |  リブログ(0)

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。