迷路もどきパクってみました。

 むかしむかしのコモドールでの実行画面。シンプルな画面で迷路っぽい出力。

現代のC#でできないわけがなかろうとパクってみました。

 
using System;
namespace ConsoleApplication3 {
    class Program {
        static void Main(string[] args) {
            int c = 0;
            var v = new Random();
            while (true) {
                //(int)'/' = 65295
                //(int)'\' = 65340 = 65295 + 45
                var cc
                    = (char)(65295 +
                    Math.Round(v.NextDouble(), 0, MidpointRounding.ToEven) * 45);
                Console.Write(cc);
                c++;
                if (c == 40) {
                    c = 0;
                    Console.WriteLine("");
                }
            }
        }
    }
}
 
元のコードとはシンプルさにおいて大きな違いがありますが、/と\の文字コードが連続してないやらなんやらで。。。。すんまそ。
んでも実行結果
 f:id:turkey_pc:20170730162937p:plain
 
(追記)配列に逃げたほうがシンプルだったろうなぁ。

現場で見かけたコードのグチ。

 

仕様はざっくりこんな感じ。

テーブル書くのめんどくさいからExcelで書いたスクショ。

f:id:turkey_pc:20170728093852p:plain

 

で、現場にあったコードをざっくり解読すると

-----------------------------------------------------------------

①keycol=2のレコードを全カラム取得

②①をもとにkeycol=2の全カラムを更新(col_99だけは"北海道"に)

 

①SELECT col_1,col_2,col_99,col_100 FROM tbl WHERE keycol = 2;

②UPDATE tbl SET col_1 = "田中", col_2 = "花子" , col_99 = "北海道" , col_100 = "女" WHERE keycol = 2;

-----------------------------------------------------------------

ということであった。

 

なんか裏の意図があったりするのだろうか?(外注さんの仕事なのでいまさら問い合わせもできず)

 

とりあえずtblのカラムを増やす改修の担当が回ってこないことを願っている。

 

 

ListはAdd順らしい

前の続き。

DictionaryはAdd順で列挙してくれるとは限らないらしい(なんせググって見つかったことである)。そしてさらにもうちょいググり続けるとListはAdd順で列挙してくれるらしい???(だんだんあやふやになってきたorz)

 

じゃ、Dictionaryの代わりにListにするかってことで

            var dic = new List<KeyValuePair<int, string>>();
            dic.Add(new KeyValuePair<int, string>(8, "伊丹"));
            dic.Add(new KeyValuePair<int, string>(4, "新伊丹"));
            dic.Add(new KeyValuePair<int, string>(6, "稲野"));
            dic.Add(new KeyValuePair<int, string>(3, "塚口"));

・・・・

new KeyValuePair<int, string>がいっぱいあってうざったい!!!!!!

Dictionaryならすっきりだったのに!!!!

 

てなわけでKeyValuePairのListに特化したClassを作ってみた。

    class ListKeyValuePair<T1,T2> : List<KeyValuePair<T1, T2>> {
        public void Add(T1 key,T2 value) {
            base.Add(new KeyValuePair<T1, T2>(key, value));
        }
    }

うん、やってることは単純だなぁ。これつかうと

            var dic = new ListKeyValuePair<int, string>();
            dic.Add(8, "伊丹");
            dic.Add(4, "新伊丹");
            dic.Add(6, "稲野");
            dic.Add(3, "塚口");

よし、これですっきし。

 

これ実戦投入する気はない(お堅い現場でつので)が、やるだけやったのですっきし。

 

 

 

Dictionaryの列挙順はAdd順じゃないかもだって?

こんなコード書いた。
 
            var dic = new Dictionary<int, string>();
            dic.Add(8, "伊丹");
            dic.Add(4, "新伊丹");
            dic.Add(6, "稲野");
            dic.Add(3, "塚口");
            foreach (var item in dic)
                Console.WriteLine(item.Value);
 
結果はこんなん
-------------
伊丹
新伊丹
稲野
塚口
-------------
 
ああ、よかった。無事に伊丹線の路線図できたね!
 
 と・こ・ろ・が
ちょっと気になることがあってググったら気になる記述が。
 

bbs.wankuma.com

 

>列挙処理のために、ディクショナリ内の各アイテムは、値とそのキーを表す KeyValuePair<TKey, TValue> 構造体として処理されます。 アイテムが返される順序は未定義です。

 

「順序は未定義です」

 

つまり、Dictionaryの各要素を列挙する場合、Addした順に列挙してくれるとは限らないということ???ある日突然「新伊丹」と「稲野」がひっくり返った路線図を吐き出すかもってか???

 

うーん、これはこまった。というわけで、ちょっと考えよ。

VisualStudioのメソッド抽出

VisualStudio2010でメソッド抽出やってみた。
 
<抽出前>
    string a = "";
    bool b = false;
    a = "";
    if (b)
        a = "true";
    Console.WriteLine(a);

<抽出後>
    string a = "";
    bool b = false;
    a = Hoge(a, b);
    Console.WriteLine(a);
 
private static string Hoge(string a, bool b) {
    a = "";
    if (b)
        a = "true";
    return a;
}
 
Hogeにstringの引数がくっついてるのが納得いかん(コードの書き方に難があるというのはいいっこなし)。
 
VisualStudio2015では納得いく動きになってんだけどね。
 

バグを乗り越えて(?)

現在お仕事してる現場関係のグチでおます。特定されない程度にぼかす。

 

その現場、過去(私が逃亡wしてた時期)にひでーバグを出してた。

 

「int配列の各要素につき値が0以外なら文字列変換して出力。0ならば空文字を出力。」に対してこんなバグ入りソースを書いてやがった(C#だべ)

 
<ソース> 
string s = "";
foreach(var item in new[] { 1, 2, 3, 0, 5 }) {
    if (item != 0)
        s = item.ToString();
    Console.WriteLine(s);
}
</ソース>
<結果>
1
2
3
3
5
</結果>
 
こういうくそバグでもリリースされた後の発覚となると厳しい原因分析があって次期バージョンの確認作業に反映しなければいけないわけ(次期バージョンやらせてもらえるだけでも感謝しないといけない状況でつが)で。。。リリース直前の確認項目に
「変数が初期化されているか」
が追加されることに。
 
リリース直前に?
 
また逃げたくなってきた(をい
 
 
 
 

トライやる・ウィーク

朝っぱらから近所を散歩してると「トライやる・ウィーク」なる旗がはためいていた。

わが兵庫県で始まった中学生の職業体験行事が始まったことを知らせるものである。

トライやる・ウィークでいろんなことを学ぶ(将来の私の年金原資である)中学生諸君のことは応援するものである。

 

それはさておき、もし、自分のいる仕事場(ソフトウェア開発)に職業体験の中学生を受け入れるとしたら、どんな問題があるだろうか?

ぱっと思い当たる問題は「ソースを見られる」こと。

さすがにUSBメモリ持ち込んでソースを持って帰るなんてことはしないだろうが、ソフトウェア開発の職業体験となるとソースを見せて理解させて改修させないと意味がないわけなのだが、自社販売のソフトならともかく他社販売のソフトだとソースを見せることがNGなわけで。

職業体験を受け入れることはできないか。