yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2018/01 の記事
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31]

yamicha.com's Blog
 諸事情により、現在更新休止中。ご了承ください。もし今後ブログを再開することがあるとすれば、その際にはこのブログスクリプトではなく、新しく開発したものによるかもしれません。
 当ブログ管理者についてはこちらをご参照。
開発魔法(737)
社会問題(733)
お知らせ(11)
質問・バトン回答(15)
ゲスト出演(8)
経済・知的財産(150)
ゲーム開発(182)
[Ada] 勝手に補足
- Note
- 金配りの次の一手


- Endless Ultimate Diary
- 銃世界

漢字バトン
- うるる雑記帳
- 漢字接力棒

ツキアイゲノムバトン
- ブログ@うにうに画像倉庫
- あぶ内閣

縺イ縺セ縺、縺カ縺励ヰ繝医Φ
- 月夜のボヤキ
- 騎士サーラバトン
パスワードを使う
名無し (2012/02/27)


開発者解放裁判
yamicha.com (2010/03/14)
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用し..

開発者解放裁判
通りすがり (2010/03/08)
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発..

新型インフルエンザの恐怖
いげ太 (2009/11/03)
> C#などの「int Some(int , int)」は、F#では「(int * int) ->..

時効に関する思考
yamicha.com (2009/08/31)
>いげ太さんコメントありがとうございます。手元にドキュメントが少..
Homepage
Blog Top
Normal View
List View
Search
Calendar
Comment List
Trackback List
Blog RSS
Send Trackback
Phone Mode
Administrator
yamicha.com
Blog
るううるる。
Source
法令データ提供システム
FindLaw
Development
Java2 Platform SE 6
Java EE 6 API
MySQL Developer Zone
PHP Reference
MSDN Library
Ada Reference Manual
Objective Caml
Python Documentation
Erlang
Prolog Documents
幸福を実減する政策評価
2009/07/25(Sat)18:04:56
 情けない解散引き伸ばし戦術もようやく終わり、総選挙の日程が決まりましたが、自民も民主も支持するまでには至らないと考える人は少なくないようです。麻生氏と鳩山氏のどちらが首相にふさわしいかの世論調査では、どちらもふさわしくないと答える人がかなり多いようですし、政権交代への期待は大きくても、民主党政権への期待はそれほどでもないようです。
 私の意見を述べるなら、今回の選挙ではできる限り政権交代がなされるべきです。民主党の政策には現実的でない部分も存在し、不安が否めないのは事実ですが、自民党も「金配り」などという野党でも考え付かないような非現実的なバラマキ無駄遣いを発案し、あろうことか実行してしまったのですから、野党よりタチが悪いと言う他はなく、目くそが鼻くそを笑ったところで説得力がありません。
 民主党に政権を任せても安心と言い切れる状況になるには、さらに10年は必要でしょう。民主党は未だに寄り合い所帯であり、しかも当時の政治家が寄り集まって結党しているだけに、党首をはじめとする重鎮には旧世代の政治家が多くなっています。民間から政治の世界に入った新しい人々が党を動かし、寄り集まった議員たちが旧社会党や旧自由党ではなく「民主党議員」となるためには、まだ時間が必要でしょう。大連立騒動における党内の多くの反対などを見る限り、その土壌はできつつあるようですが、まだ十分とはいえません。
 しかしながら、自民党はもはや民主党よりも安定のない状態にあります。体質は完全に古びており、公明党との連立などで何とか命をつないできたに過ぎません。その後、スリード提案のあまりにもくだらない低IQ選挙を実施したものの、そのせいで固定票の多くも同時にぶち壊してしまい、なおさら命を縮める結果となりました。このまま延命させたとしても、醜態をさらすだけの可能性が高いのです。
 私が望む選挙の結果は、民主党ら野党が過半数を取って政権交代を行い、しかもその政権がほどほどの長さで続くことです。政権交代までは良くても、それが即座に終わってしまっては、以前の政権交代モドキと全く変わらない結末となります。政権交代のある政治を現実のものとした上で、汚物にまみれた現在の自民党は一度壊滅し、利権がなく政権担当能力を持った政党に生まれ変わらなくてはなりません。
 私は、民主党がすぐに引きずり下ろされ、瓦解するのも望みませんし、自民党が完全に消えてなくなってしまうのも望みません。民主党が瓦解した後にまたもや自民党独裁が続くのでは意味がありませんし、逆に民主党独裁でもいけません。民主党自体、今のところ内部にも火種を抱えており、本当に政権担当能力があるかは大変不安ですが、金を配るような政権に政権担当能力が全くないことだけははっきりしていますので、その意味では政権交代のリスクは比較的低いといえるでしょう。
 このように、私は政権交代を強く望んでいますが、上記を見ていただければ分かる通り、必ずしも民主党を全面的に支持しているわけではありません。自民と民主の両方を支持しない人は少なくないはずで、他党も受け皿となるのは難しいようです。また、二大政党以外には弱小政党が多いため、選挙区によっては理想の政党に投票できない場合もあります。
 そうした状況を踏まえてか、今回新たに登場したのが幸福実現党です。衆院選では第一党を狙うと明言しており、自民や民主に匹敵するほど大量の候補を立てる方針です。支持母体は宗教団体の「幸福の科学」で、党首は同団体代表の妻となっています。
 当ブログではこれまでにも様々な政党や政策について述べていますので、ここで次期第一党を掲げる同党についても取り上げておくとしましょう。

宗教団体「幸福の科学」について
 大川隆法が設立した宗教団体で、「エル・カンターレ」なるものを本尊としています。また、大川氏はこの「エル・カンターレ」なるものの本体であるとされており、ゆえにこの名は大川氏のことをも示すとされています。はっきり言って意味がよく理解できないのですが、釈迦、孔子、キリスト、ゼウス、ニュートンなどの頂点に立つ存在なのだそうです。
 Wikipediaの「幸福の科学」の項によれば、霊が大川氏の口を通じて物事を語る「チャネリング」というものが存在するらしく、以下のような人々が語ったとされる「霊言集」が出版されているようです。

日蓮、日持、空海、恵果、天台智顗、親鸞、唯円、蓮如、一遍、道元、栄西、白隠、良寛、無門慧開、イエス・キリスト、モーゼ、ミカエル、スウェーデンボルグ、内村鑑三、天照大神、天御中主命、大国主命、弟橘媛、卑弥呼、孔子、孟子、老子、荘子、墨子、ゼウス、エドガー・ケイシー、出口王仁三郎、谷口雅春、高橋信次、リンカーン、ガンディー、エジソン、ニュートン、聖徳太子、福澤諭吉、ソクラテス、ピカソ、シェイクスピア、ダンテ、ベートーヴェン、松尾芭蕉、西郷隆盛、坂本龍馬、 勝海舟、吉田松陰、ナイチンゲール、ヘレン・ケラー、紫式部

 もはや「世界観」という言葉すら存在しません。実在する人物から創作上の人物まで何でもありで、いかなる脈略があるのか全く意味不明です。これを見て意味が分からなかったとしても、私への質問はご遠慮ください。私にも意味が分かりません。それに何より、他の宗教に対する冒涜に他なりますまい。

「幸福実現党」の概要
 基本的には保守派で、右派的な政策を実現すると主張しています。漫画家のさとうふみや氏を擁立(しかもポスターには顔写真ではなく絵を記載)するなど、小泉低IQ選挙に近いような方策も見受けられます。また、対北朝鮮強硬派であることを前面に出しています。何でも、金正日の守護霊と対話したところ、守護霊とやらは「核の力で韓国を併合する」「日本の脅迫に核は不要、ミサイルを撃ち込めば十分」と称したのだそうです。
 政策には、いわゆる「ネット右翼」の主張と似通ったところが見受けられます。ネット右翼をそうした政策や低IQ戦術で切り崩そうという戦術でしょうか。しかしながら、「ネット右翼」というのは単に「インターネット上で右派的な言動を行う人」を全員一緒くたにしてカテゴリ分けしたものに過ぎず、何も考えていない人から十分な考えを有する人まで様々な人がいるはずですので、そうそう簡単に支持が得られるかは疑問です。
 なお、オウム真理教が以前に「真理党」なるものを立ち上げたことがありましたが、その際には案の定全員落選となりました。オウムはその後に犯罪組織化していったとも言われていますが、実際にはそれ以前に信者2人が死亡しており、坂本弁護士一家も殺害されているため、落選してから殺人を開始したわけではありません。幸福実現党についても、一部にはオウム事件に絡めて全員落選時の暴走を憂慮する声がありますが、全員落選でもそうでなくても犯罪性向のある組織は犯罪を起こすでしょうし、そうでなければ起こさないわけですから、あまり深く考える必要はないでしょう。
 以下、同党の新憲法試案及び主要な3政策について分析してみます。ただ、政策PDFを読んでみても全く中身がないため、詳細を論じるのは困難です。なお、同党がカルト宗教だからといって、政策評価に減点なり手心なりは加えておらず、政策は政策として正当に評価するよう努めています。ここは私のこだわりですので、ご了承願います。

新憲法試案
 さすがに第一党を目指しているだけはあり、憲法の試案まで公開されています。新たな憲法は16条からなり、前文は次のようになっています。

われら日本国国民は、神仏の心を心とし、日本と地球すべての平和と発展・繁栄を目指し、神の子、仏の子としての本質を人間の尊厳の根拠と定め、ここに新・日本国憲法を制定する。

 同党は憲法9条の改正を叫んでいるだけに、新憲法には憲法9条に当たるものは存在せず、軍隊については「国民の生命・安全・財産を護るため、陸軍・海軍・空軍よりなる防衛軍を組織する」と定められています。武力行使の制限など、これ以外の規定は見当たりません。
 その他、中身を簡単に抜粋しておきますと、「行政は、国民投票による大統領制により執行される。大統領の選出法及び任期は、法律によってこれを定める」「大統領令と国会による法律が矛盾した場合は、最高裁長官がこれを仲介する。二週間以内に結論が出ない場合は、大統領令が優先する」「国民には機会の平等と、法律に反しない範囲でのあらゆる自由を保障する」「国家は常に、小さな政府、安い税金を目指し、国民の政治参加の自由を保障しなくてはならない」「地方自治は尊重するが、国家への責務を忘れてはならない」などといった規定が存在しており、16条で「本憲法に規定なきことは、大統領令もしくは、国会による法律により定められる」と規定されています。
 インターネット上では「稚拙」と評されるこの試案ですが、実際に読んでみて良く分かりました。実のところ、この憲法は何も書かれていないのと同じなのです。憲法は国を縛るものとされており、憲法の範囲を超えた法律は作成できません。国民の権利を保障し、国家の義務や守るべき規定を定めたものといえるでしょう。
 ところが、この試案には国民の権利を守る、あるいは国の責務を定めるような規定がほとんどなく、あったとしても「(略)大統領の選出法及び任期は、法律によってこれを定める」「国民には(略)法律に反しない範囲でのあらゆる自由を保障する」「国家は常に、小さな政府、安い税金を目指し(略)」といった具合で、全く意味を成さないのです。「法律に反しない範囲での」自由とは、すなわち法律でいくらでも自由を制限できることを意味します。現行の憲法では国民の権利が定められており、それを侵害するような法律は作れませんが、この試案にそのような縛りはほとんどありません。また、「目指す」などといった極めて主観的・抽象的な表現は、せいぜい努力義務以上の意味を持ちえません。
 さらに、たった16条の憲法でありながら「〜は法律で定める」がやたら多く、しかも最後には「本憲法に規定なきことは、大統領令もしくは、国会による法律により定められる」なのですから、「何でも法律で定める」と言っているのと同じです。このようなおためごかし憲法を作るなら、最初から「憲法は廃止し、すべて法律で定める」と公約すべきでしょう。少なくとも、まともに法学を学んだ人間が作るような憲法には見えません。
 ご興味のある方は、ぜひとも幸福実現党による憲法試案(公式Webサイトにあります。お手数をおかけして申し訳ありませんが、こちらからのリンクはあえて行いません)と、本物の日本国憲法を見比べてみてください。一目で違いが分かるはずです。

減税政策
 幸福実現党の目玉の1つが、大規模な減税政策です。
 消費税、相続税、贈与税はすべて廃し、消費を喚起するのだそうです。また、所得税も大幅に下げ、法人税は最低ラインまで下げるとしています。また、金融緩和で資金繰りに困る企業は徹底支援し、大胆な規制緩和を行うことで3%成長を達成、証券税制の撤廃によって日経平均2万円台を目指すとしています。
 自民党や民主党でさえ「財源を示せ」とつつかれているのに、ここまで来るとお笑い種にしかならないでしょう。仮に年3%の成長を達成し、日経平均が2万円に乗ったとしても、財源が足りないのに変わりはありません。現状でさえ毎年大赤字となっているにもかかわらず、さらに大幅減税などを行っていては、金がいくらあっても足りません。旧社会党や共産党でさえ、ここまで非現実的ではありません。
 もう少し掘り下げてみましょう。まず規制緩和ですが、無思慮な規制緩和が今日の状況を招いたことが分かっているのでしょうか。いかなる緩和をするのかは良く分かりませんが、あまりにも思慮がないと言わざるを得ません。このまま緩和を続ければ、弱い立場の人や中小企業などの弱者がジリ貧になるのは見えていますが、そのような世の中で一体どうやって消費を喚起するのか、不思議でなりません。
 相続税や贈与税に関しては、なぜ撤廃するのか理解に苦しみます。相続は金持ちが代々金持ちになるシステムで、スタートラインを変えてしまうものです。憲法では「国民には機会の平等と、法律に反しない範囲でのあらゆる自由を保障する」と定められているのですから、下手すると違憲です。どうせ「金があってもなくても機会は提供する」などという言い訳で合憲にしてしまうのでしょうが、自党が作った憲法に自ら挑戦するのはいかがなものでしょう。
 さらに言えば、相続税が全く、あるいはほとんど存在しない場合、損失なく財産を譲り渡せるわけですから、逆に財産が貯め込まれてしまう可能性が非常に高いのです。したがって、消費が喚起されるなどとは幻想以外の何者でもありません。また、相続税は一般庶民にはほとんど縁のないものですから、金持ち以外には恩恵がありません。富の集中と偏在、格差の固定化と機会の不平等、消費おしみが発生するのは目に見えています。ちなみに同党は、相続税廃止について「親の老後の面倒を見る子どもにメリットを与える」としていますが、現行でも相続税は最低6000万円以上でなければ課税されず、最高税率の50%に達するにはさらに3億円必要ですから、まるで理由になっていません。果ては、重ねるように証券税制撤廃とくれば、封建社会を狙っているとしか考えられません。
 所得税や法人税の減税は、格差の固定化のための重要ツールです。所得税減税により、一般人にはあまり恩恵が及ばない一方、金持ちはさらに減税となります。その財によって格差を固定化し、財産は相続税なしに相続でき、まさに強固な封建制が誕生します。法人税が下がれば、利益圧縮圧力の低下により、経費や人件費の縮小も発生しかねませんし、赤字企業や黒字の少ない企業は恩恵にあずかれません。規制緩和によって労働者使い捨てやり放題、下請けへの無理難題出し放題の大企業が徹底的に費用を切り詰め、大量の利益に法人税もかからず大もうけ、といった図が目に浮かびます。中には「減税された分を人件費や開発費につぎ込める」といった意見もあるはずですが、人件費や開発費は費用の勘定であり、それを利益から減算した上で法人税の計算が行われますので、全く意味がありません。
 この上になお消費税廃止とは、非現実の極みです。何かの冗談でしょうか。もっとも、福祉と医療と治安をすべて捨てればその限りではありません。

外交・国防
 「北朝鮮に毅然と対処」と表現すれば聞こえは良いですが、まともに考えているのか全く不明瞭です。私自身は賛成しないものの、北朝鮮への先制攻撃論の意見自体は尊重しますが、金正日の守護霊なるものを理由として国家外交政策を決定され、挙句の果てには憲法9条まで変えられてしまうのでは、たまったものではありません。
 内容としては、いわゆる「ネット右翼」の人々が好きそうな言葉を無思慮に並べ立てているだけ、という印象です。北朝鮮や中国には断固として対応し、アメリカを機軸としつつインド、ロシア、オーストラリアら他国とも関係を築いて味方を増やすとのことですが、その際に発生する摩擦や懸念事項、外交問題については完全にノータッチです。特にロシアとの間には懸念が色々あるはずなのですが、これでは納得いきません。
 以下、政策PDFから引用しますが、

核武装は原則行いませんが、状況によっては、アメリカやロシアからの核のレンタルは検討します(有事の際には核兵器を引き渡してもらう核シェアリング)。
増加する国防費については、日本国の安全保障に関心のある内外の投資家が出資する「国防ファンド」を創設し、単なる増税にはしません。

 やはり納得いきません。
 ある場所で見かけた中国脅威・核武装論では、次のようなことが述べられていました。「これから中国が巨大化し、ロシアなども国力を回復してくると、日本はアジアに取り残された状態となる。それらの国との摩擦を恐れ、米国は日本の保護を拒否。中国の侵略によって日本は赤化され、支配される」。言うまでもありませんが、このような状況には何の対処もできません。かといって、ロシアとの核シェアリング協定などを結ぼうものなら、米国が相当ピリピリするのではないでしょうか。そもそも懸念だらけのロシアとどのように交渉するのかは不明です。
 国防ファンドに関しては、要するに資金調達を外に求めるだけ、つまり借金ではありませんか。「軍備費は増税ではなく借金でまかないます」と書くのと同じです。

3億人国家とGDP世界一の実現
 1つの家庭で3人以上子が持てるよう下支えを行い、日本の人口を2億人まで増やした上で、移民1億人を受け入れて3億人国家を作り、2030年にはGDP世界一を目指し、年金問題の解決を行うそうです。交通網整備と農業の自由化で雇用を増やして地方に住む若者を増やし、都市部に安くて広い住宅を大量供給して住宅問題を解消し、医療費は「公立病院の経営効率化」で何とかするのだそうです。
 いくらなんでも、悪い冗談でしょう。年金自体は無限連鎖講のシステムですから、人を増やすのは一時的な解決になるとしても、日本に住める人の数には物理的限界があります。したがって、人口を増やすにも限界があります。ところが、その後の年金財政のビジョンは全くありません。国庫から出そうにも、減税三昧では捻出ができるわけがありません。
 人を増やせば税が増えるという単純すぎる思想のようですが、人が増えると費用も増えるのですから、そう簡単にはいきません。また、人口規模を倍以上に増やすとなると、エネルギーや食料といった問題も解決しなくてはならない難問です。
 食料に関しては、同党は「食料自給率70%を目標に、最低でも50%を目指す」としていますが、たった1億人強の現状でさえ50%にも達していないのに、狭い日本で3億人の70%分もの食料を自給する具体的な手段が知りたいところです。何をどうするかも明示せず、ただ単に「効率化する」だけでは済みません。
 また、地方に住む若者を増やすとのことですが、都市部に安くて広い住宅を大量供給するのであれば、地方に住む若者など減る一方でしょう。そもそも、人口が3億人も存在するのに、都市部に安くて広い住宅を大量供給などできるものではありません。交通を整備して地方との行き来を容易にするとのことですが、ストロー効果という言葉をご存知ないようです。
 医療費その他の主張については、もはや言及する必要もないでしょう。移民受け入れ・人口3億人計画が他の主張と絶妙に絡み合い、すべての主張の実現性・正当性を根本から破壊してしまっています。見事としか言いようがありません。

その他
 他にも不思議な政策が色々と掲げられています。
 教育関係では「宗教教育で優れた人格を育てる」のだそうです。おそらく、ほとんどご想像の通りでしょう。しかも、PDFではその下に小さな字で「憲法20条を改正します」と書いてあります。

日本国憲法第二十条
信教の自由は、何人に対してもこれを保障する。いかなる宗教団体も、国から特権を受け、又は政治上の権力を行使してはならない。
○2  何人も、宗教上の行為、祝典、儀式又は行事に参加することを強制されない。
○3  国及びその機関は、宗教教育その他いかなる宗教的活動もしてはならない。

 字が小さいゆえにうっかり見過ごすところでしたが、大変です。これ、非常に大事です。
 その他にも素晴らしい政策は多く、

・ユーラシア大陸を一周するリニア鉄道を構想し、実現します。
・インド、南西アジア、ヨーロッパ、イギリス、アフリカ、北欧、ロシア、北方四島を結ぶ構想も具体化していきます。
・アメリカ、南米でも同様の構想を進めます。
・国家プロジェクトとして、エネルギー革命、食糧革命、宇宙開発などに取り組みます。
・環境と経済成長を両立させる新技術を世界にも広げ、経済のパイをさらに大きくします。
・燃料電池、太陽光発電、風力発電、海洋温度差発電など新エネルギーの研究・開発を進め、「脱 石油型」文明へのシフトをめざします。
・水耕栽培型の「植物工場」や、養殖技術の革新による「海洋牧場」を開発・普及し、飛躍的に食糧の生産性の向上をはかります。
・これからのフロンティアは海と宇宙であり、海洋・海底資源と宇宙開発を推進します。
・国家百年の計として、21 世紀中に月と火星に基地を建設することを国家目標とします。

 など、SF小説の構想として見るなら魅力的な政策が大量に詰まっています。

 PDF自体はそれなりにまともにデザインされているのですが、これほどダメさ加減が分かりやすい政策集は初めてです。自民党も民主党も、さらには共産党でさえ、一見するともっともらしいことが書いてあるものですが、幸福実現党の政策にはその「もっともらしさ」がありません。言うなれば「裸の政策」で、その意味では非常に斬新でした。

 相変わらずF#。今度こそPrimary Constructorなるものを扱ってみます。
 まずはおさらいから。F#では2つの方法でコンストラクタを定義できます。1つ目はnewを使う方法で、「何らかの引数を受け取って自分自身のオブジェクトを返す関数」のようにして実装します。もう1つはPrimary Constructorなる方法で、クラス名の後ろにコンストラクタの引数を記述します。F#でクラスを作成する際には、いずれの方法も使用できます。
 ところが、OCamlでは当たり前のように通用するコードが、なぜかF#では通用しないのです。このPrimary Constructorなるもの自体、OCamlの記法に似せてあるはずなのですが、困ったこともあるものです。
 仮に「2Dの点」を表すクラスがあるとして、コンストラクタとしてX,Y座標の値を取りたいとしましょう。OCamlでは以下のように書くだけです。
class point (ax : float) (ay : float) = object(this)
	val mutable x : float = ax
	val mutable y : float = ay

	method get_x : float = x
	method get_y : float = y
	method set_x (v : float) : unit = x <- v
	method set_y (v : float) : unit = y <- v
end;;

print_float (new point 1.5 2.0)#get_x
 これをF#で書き直せば、以下のようになります。
#indent "off"

open System

type Point (ax : float , ay : float) = class
	val mutable x : float = ax
	val mutable y : float = ay

	member this.X
		with get () : float = this.x
		and set (v : float) : unit = this.x <- v
	member this.Y
		with get () : float = this.y
		and set (v : float) : unit = this.y <- v
end;;

Console.WriteLine (new Point (1.5 , 2.0)).X
 .NETらしくプロパティを使ってみましたが、それ以外はほとんどOCamlと同じです。
 しかし、このプログラムはなぜか動作しません。どういうわけか、以下のようなエラーメッセージが表示されてしまいます。
error FS0010: Unexpected symbol '=' in member definition
 どうやら「val mutable varname = ...」は許されないらしいのです。OCamlではvalに対して初期値を設定しなくてはなりませんでしたが、F#では逆に初期値を設定すると怒られてしまいます。これではPrimary Constructorなど役に立たない気がしてなりませんが、一体どうしたものでしょうか。
 変数は不変となってしまいますが、以下のような記述であれば動作しました。
#indent "off"

open System

type Point (ax : float , ay : float) = class
	member this.X with get () : float = ax
	member this.Y with get () : float = ay
	member this.Length with get () : float = Math.Sqrt (ax * ax + ay * ay)
end;;

Console.WriteLine (new Point (1.5 , 2.0)).Length
 また、F#のマニュアルによれば、valに対しては初期値の代入ができなくても、letに対しては代入ができるようです。
#indent "off"

open System

type Point (ax : float , ay : float) = class
	let mutable x : float = ax
	let mutable y : float = ay

	member this.X
		with get () : float = x
		and set (v : float) : unit = x <- v
	member this.Y
		with get () : float = y
		and set (v : float) : unit = y <- v
end;;

Console.WriteLine (new Point (1.5 , 2.0)).X
 letはプライベート変数のようにも見えますが、実際にはvalにもprivate宣言ができるため、クラス内で使用できるローカル関数とでも解釈すべきでしょうか。実際に.NET上でどのように扱われているのかは不明ですが、マニュアルには「Instance let bindings are lexically scoped (and thus implicitly private) to the object being defined.」と書かれています。
 使用する際には、valの場合は「this.varname」のようにアクセスする必要がありましたが、letは名前のみでアクセスできます。val同様、mutableと表記しておけば、<-による代入も可能になります。
 その他、マニュアルにはdoなるものを使用する方法も記載されています。doには何らかの命令を記述でき、インスタンスを作成した際に呼ばれるようです。呼び出されるタイミングについては、厳密には色々と規定がありそうですが、今のところはそこまで考える必要はなさそうです。
#indent "off"

open System

type SomeClass () = class
	do Console.WriteLine "This is the 'do' operation."
end;;

Console.WriteLine (new SomeClass ())
 無論、do内ではPrimary Constructorの引数も使用できます。以下、コンストラクタに渡した文字列を表示するクラスです。
#indent "off"

open System

type MessageClass (msg : string) = class
	do Console.WriteLine msg
end;;

Console.WriteLine (new MessageClass "Hello F#!");;
Console.WriteLine (new MessageClass "Do you like functional languages?")
 これを応用し、doを使ってval mutableに対して値を代入してやれば、おそらくval mutableにPrimary Constructor由来の値を設定することもできるでしょう。
#indent "off"

open System

type MessageClass (m : string) = class
	val mutable msg : string
	do msg <- m

	member this.ShowMessage () = Console.WriteLine this.msg
end;;

Console.WriteLine ((new MessageClass "I like F#!").ShowMessage ())
 ところが、どういうわけかエラーが発生してしまいます

error FS0191: Unintialized 'val' fields in implicit construction types must be mutable and marked with the '[<DefaultValue>]' attribute. Consider using a 'let' binding instead of a 'val' field

 どうやら、val変数はコンストラクタで初期化しなくてはならず、さもなくばDefaultValueアトリビュートをつけなくてはならないようです。なお、完全に名前の通りではありますが、DefaultValueアトリビュートは変数に対してデフォルト値を設定します。ひとまず、言われた通りにDefaultValueアトリビュートをつけておきましょう。
#indent "off"

open System

type MessageClass (m : string) = class
	[<DefaultValue>] val mutable msg : string
	do msg <- m

	member this.ShowMessage () = Console.WriteLine this.msg
end;;

Console.WriteLine ((new MessageClass "I like Ada!").ShowMessage ())
 ところが、例によって動作しません。
error FS0039: The value or constructor 'msg' is not defined.
 どうやら「msgなるものは定義されていない」と怒られているようです。そういえば、valを使って定義した変数は、this.varnameのように自分自身を経由して呼び出さなくてはなりませんでした。しかしながら、自分自身を用いようにも、this.doのような記法は誤りだと言われてしまいます。
 F#のマニュアル曰く、その場合にはasが使えるようです。
#indent "off"

open System

type MessageClass (m : string) as this = class
	[<DefaultValue>] val mutable msg : string
	do this.msg <- m

	member this.ShowMessage () = Console.WriteLine this.msg
end;;

Console.WriteLine ((new MessageClass "I hate VB!").ShowMessage ())
 これでようやく動作するようになりました。
 マニュアルに書いてある事柄をもう少し試してみます。F#にはコンストラクタが2種類存在しますが、この2種類は混在が可能で、newからPrimary Constructorを呼び出すことができるようです。
 先ほどのPointクラスについて、X,Yの座標を取るコンストラクタをPrimary Constructorで提供し、引数なしの場合はnewからPrimary Constructorを呼び出してみます。
#indent "off"

open System

type Point (ax : float , ay : float) = class
	let mutable x : float = ax
	let mutable y : float = ay

	new () = new Point (0.0 , 0.0)

	member this.X
		with get () : float = x
		and set (v : float) : unit = x <- v
	member this.Y
		with get () : float = y
		and set (v : float) : unit = y <- v
end;;

Console.WriteLine (new Point ()).X
 どうやら正しく動作するようです。
カテゴリ [開発魔法][社会問題] [トラックバック 0][コメント 0]
<- 前の記事を参照 次の記事を参照 ->

- Blog by yamicha.com -