はてなキーワード: 戻り値とは
まじな話をすると、N予備校のプログラミング入門コースやるのがオススメ。
一日8時間勉強時間があるなら、だいたい一ヶ月で終わる内容。
月額1000円だけどしっかり勉強すれば一ヶ月の無料期間中に終わると思う。
もともとN高等学校のノンプログラマーの生徒をWebエンジニアとして就職させるために作られたカリキュラムで講師曰く去年はこれで二人エンジニア就職を決めたらしい。
内容も相当親切に説明していて、プログラミングで何か作るだけじゃなくて、就職に必要な環境構築やセキュリティまでみっちりやる。
で講師が書いてる入門コースで習うことがまとめ。テキスト教材もあるけど授業も1項目を2時間で説明している。授業は週2の生放送とそのアーカイブがある。
↓みたいなことが学べる
----
Web ブラウザとは (Chrome, デベロッパーコンソール, alert)
はじめてのHTML (VSCode, HTML, Emmet)
さまざまなHTMLタグ (h, p, a, img, ul, tableタグ)
HTMLで作る自己紹介ページ (HTMLタグ組み合わせ, コンテンツ埋め込み)
はじめてのJavaScript (JS, ES6, エラー)
JavaScriptでの計算 (値, 算術演算子, 変数, 代入)
JavaScriptで論理を扱う (論理値, 論理積, 論理和, 否定, 比較演算子, if)
JavaScriptのループ (ループ, for)
JavaScriptのコレクション (コレクション, 配列, 添字, undefined)
JavaScriptの関数 (関数, 関数宣言, 引数, 戻り値, 関数呼び出し, 再帰)
JavaScriptのオブジェクト (オブジェクト, モデリング, プロパティ, 要件定義)
はじめてのCSS (CSS, セレクタ, background-color, border)
CSSを使ったプログラミング (transform, id, class)
Webページの企画とデザイン (企画, 要件定義, モックアップ, 16進数カラーコード)
診断機能の開発 (const, let, JSDoc, インタフェース, 正規表現, テストコード)
診断機能の組込み (div, 無名関数, アロー関数, ガード句, truthy, falsy)
ツイート機能の開発 (リバースエンジニアリング, URI, URL, URIエンコード)
LinuxというOS (VirtualBox, Vagrant, Ubuntuのインストール, OS, CUIの大切さ)
コンピューターの構成要素 (ノイマン型コンピューター, プロセス, lshw, man, ps, dfの使い方)
ファイル操作 (pwd, ls, cd, mkdir, rm, cp, mv, find, ホストマシンとの共有ディレクトリ)
標準出力 (標準入力、標準出力、標準エラー出力、パイプ、grep)
vi (vimtutor)
シェルプログラミング (シバン, echo, read, 変数, if)
通信とネットワーク (パケット, tcpdump, IPアドレス, TCP, ルーター, ping)
サーバーとクライアント (tmux, nc, telnet)
HTTP通信 (http, https, DNS, hostsファイル, ポートフォワーディング)
GitHubでウェブサイトの公開 (GitHub, リポジトリ, fork, commit, 情報モラル)
イシュー管理とWikiによるドキュメント作成 (Issues, Wiki)
GitとGitHubと連携 (git, ssh, clone, pull)
GitHubへのpush (init, add, status, インデックス, commit, push, tag)
Gitのブランチ (branch, checkout, merge, gh-pages)
Node.js (Node.js, nodebrew, Linux, REPL, コマンドライン引数, プルリク課題)
集計処理を行うプログラム (集計, 人口動態CSV, Stream, for-of, 連想配列Map, map関数)
アルゴリズムの改善 (アルゴリズム, フィボナッチ数列, 再帰, time, プロファイル, nodegrind, O記法, メモ化)
ライブラリ (ライブラリ, パッケージマネージャー, npm)
Slackのボット開発 (slack, mention, bot)
HubotとSlackアダプタ (hubot, yo)
モジュール化された処理 CRUD, オブジェクトライフサイクル, filter)
ボットインタフェースとの連携 (モジュールのつなぎ込み, trim, join)
同期I/Oと非同期I/O (同期I/O, 非同期I/O, ブロッキング)
例外処理 (try, catch, finally, throw)
HTTPサーバー (Web, TCPとUDP, Webサーバーの仕組み, Node.jsのイベントループ, リスナー)
HTTPのメソッド (メソッド, GET, POST, PUT, DELETE, CRUDとの対応)
HTMLのフォーム (フォームの仕組み, form, input)
HerokuでWebサービスを公開 (Webサービスの公開, heroku, dyno, toolbelt, login, create, logs)
認証で利用者を制限する (認証, Basic認証, Authorizationヘッダ, ステータスコード)
Cookie を使った秘密の匿名掲示板 (Cookie, Set-Cookie, expire)
UI、URI、モジュールの設計 (モジュール設計, フォームのメソッド制限, リダイレクト, 302)
フォームによる投稿機能の実装 (モジュール性, textarea, 303)
認証された投稿の一覧表示機能 (パスワードの平文管理の問題, 404, テンプレートのeach-in)
データベースへの保存機能の実装 (データベース, PostgreSQL, 主キー)
トラッキングCookieの実装 (トラッキング Cookie, IDの偽装, Cookie の削除)
削除機能の実装 (データベースを利用した削除処理, 認可, サーバーサイドでの認可)
管理者機能の実装 (Web サービスの管理責任, 管理者機能の重要性)
デザインの改善 (Bootstrap, レスポンシブデザイン, セキュリティの問題があるサイトを公開しない)
脆弱性 (脆弱性, 脆弱性で生まれる損失, 個人情報保護法, OS コマンド・インジェクション)
XSS脆弱性の対策 (XSS, 適切なエスケープ処理, リグレッション)
パスワードの脆弱性の対策(ハッシュ関数, メッセージダイジェスト, 不正アクセス禁止法, パスワードジェネレーター, 辞書攻撃)
セッション固定化攻撃脆弱性の対策 (セッション, セッション固定化攻撃, ハッシュ値による正当性チェック)
より強固なセッション管理 (推測しづらいセッション識別子, 秘密鍵)
安全なHerokuへの公開 (脆弱性に対する考え方, HTTPの廃止)
Webフレームワーク (Express.js, フレームワーク導入, 簡単なAPI, セキュリティアップデート, Cookie パーサー, ミドルウェア, 外部認証, ロガー)
ExpressのAPI (app, Properties, Request, Response, Router)
GitHubを使った外部認証 (Passport, OAuth)
テスティングフレームワーク (Mocha, レッド, グリーン, リファクタリング)
継続的インテグレーション (CircleCI)
クライアントのフレームワーク (Webpack, Chrome 以外のブラウザでもES6)
DOM操作のフレームワーク (jQuery, jQueryアニメーション, this)
AJAX (jQuery.ajax, クロスドメイン, 同一生成元ポリシー, x-requested-by, CORS)
WebSocket (WebSocket, WebSocketの状態遷移, Socket.io)
RDBとSQL (DDL, DCL, CREATE, DROP, INSERT, DELETE, UPDATE, WHERE)
テーブルの結合 (外部結合, 内部結合, 片側外部結合, JOIN ON)
インデックス (インデックス, 複合インデックス, Bツリー)
集計とソート (SUM, COUNT, ORDER BY, GROUP BY)
「予定調整くん」の設計 (要件定義、用語集、データモデル、URL設計、モジュール設計、MVC)
認証とRouterモジュールの実装 (Mocha, supertest, passport-stub, モックテスト)
予定とユーザーの保存 (セキュリティ要件, UUID, 複合主キー)
予定とユーザーの一覧の表示 (非同期処理, Promise, then)
出欠とコメントの表示 (入れ子の連想配列, Promise.all, 子どもからデータを消す)
○朝食:なし
○調子
はややー。
今日と昨日と遅くまで残業して疲れたからか、普段より一際、酔いが回っているので、変なこと書くかも。
昨日言われた通り、調査っていうか、っていうか、向こうの人が望む方式でやるために、もう一度調べ直しをしてた。
向こうの人曰く「このやり方でできる」そうなんだけど、やっぱりどう考えても、できないようにしか思えない。
その、それなりにプログラマやってきてるけど、Webの仕事はこの現場が初めてで、いやまあ一年ぐらいこのプロジェクトにはいるものの、今までは画面とかサーバーサイドで単体で動くバックエンドの仕組みとかを作ってたから、ちょっとこういう部分わからないから
はーい、と頷いて、頑張って調べたんだけど、
やっぱりどうも、そんなやり方はできないようにしか思えない……
うーむ、ちょっと、真面目に勉強したいな、本とか買ってまずは一般論を学ぶべきな気がしてきた。
っていうかあれか、クソ雑魚ナメクジらしく質問サイトで質問すればいいのかなあ。
うーーーーーーーーん、なんか難しいなあ、
いやでも、なんか、仕組みを考える限り、できないようにしか思えないけどなあ。
でも、ネット調べるとやってる人もいるんだよなあ。
でも、なんでできるんだあ? なんか理屈がよくわからんぞいやだなあ。
だってさ、GETだからURLの中に戻り値が入って取り出せるんでしょ?(うーーーーん、この理解もだいぶあやしいぞ、なんかうまくこの仕組みを理解できてない気がする) POSTだったら、戻り値はレスポンス(あれ? リクエスト? いっつも、レスポンスとリクエストがどっちかわからなくなる)のボディに入ってくるから、それただの戻り値で、JSONPでもなんでもなくない?
POSTのJSONPなんてできなくない?
でも、できるっていうんだもんなー。
よくわかんねーなー。
僕の頭が悪いんだろうなあ。
そもそも、なんで、向こうの人がPOSTに固執してるのかも、全く全然わからないんだよなあ。
セキリティってなに? パスワードとか、機密事項ならわかるけど、ただの検索だしなあ。
(しかも、検索結果は嫌がおうにも、DBとテキストファイルにログ出力されるから、誰が何を検索したかは、URL覗けるぐらいの人なら、POSTでもわかると思うんだけどなあ)
あーーーーー、ビールおいしい。
●XboxOne
○HaloWars2
マルチプレイのオープンベータが始まったので、とりあえずダウンロードだけした。
ストーリーが楽しみで、対人戦はあまり興味がなかったんだけど、ネットのインタビュー記事によると、
5分とかそれぐらいで楽しめる、短めのモードがあるらしいので、少し興味がある。
●3DS
プレイ。
ちゃんと、全員揃えて、悪ポケを並べて満悦です!
・カントー
コラッタ(両)、ラッタ(両)、アローラコラッタ(普)、アローララッタ(普)
ニャース(両)、ペルシアン(両)、アローラニャース(普)、アローラペルシアン(普)
イーブイ(両)
ベトベター(ド)、ベトベトン(ド)、アローラベトベター(普)、アローラベトベトン(普)
・ジョウト
ブラッキー(ド)
ヤミカラス(両)
ニューラ(両)
ヨーギラス(両)、サナギラス(両)、バンギラス(両)、メガバンギラス(普)
・ホウエン
・シンオウ
ドンカラス(普)
ミカルゲ(普)
マニューラ(普)
ダークライ(未)
・イッシュ
・カロス
ケロマツ(両)、ゲコガシラ(両)、ゲッコウガ(両)、サトシゲッコウガ(普)
イベルタル(両)
・アローラ
アクジキング(未)
(例外:タイプ:ヌル(普)、無シルヴァディ(普)、悪シルヴァディ(未))
カントーは、ベトベター(リージョンじゃない方)、ベトベトン(リージョンじゃない方)の普通絵が未実装。ドット絵はあるから仮置き中。
ジョウトは、ブラッキーの普通絵が未実装。ドット絵はあるから仮置き中。
ホウエンは、ポチエナ、グラエナ、キバニア、サメハダー、の普通絵が未実装。ドット絵はあるから仮置き中。
シンオウは、ダークライが両方未実装。仕方ないから、バッジとれ〜るセンターのバイトを仮置き中。
カロスは、いましめフーパの普通絵が未実装、ドット絵はあるから仮置き中。ときはなフーパは両方未実装。仕方ないから、バッジとれ〜るセンターのバイトを仮置き中。
こんな感じなので、仮置きしてる、ドット絵も普通絵もない、悪ポケは、
うーむ、全悪ポケが揃うのがとっても楽しみです!
っていうか、もう、バッジケースがいっぱいいっぱいなので、ドット絵を外させてほしいから、早く普通絵でコンプしてほしいなあ。
○ポケとる
20個揃えることで、レックウザが真の力を解放して、ようやく、ポケとるのチュートリアルが終わる、とかネットのコミュニティでは言われているので、楽しみ。
とはいえ、コインを使えば、普通に真の力は解放できるので、コインが使えないランキングイベントとか、メインステージの道中とかで使うぐらいなのかなあ、まだよくわかんないや。
ログボのみ。
自分も前に富士通に居て既に退職してます。後で詳しく書くけど、ソフトウェア開発職に居たです。
彼のへの感想。
富士通はクソでっかい会社なんだし、サイト見ればメインフレームやってるのだって判るんだから、開発職を希望したらメインフレーム関連の開発やる可能性あるのは当然予見出来るだろうし、それを想像してなかったのなら情弱とかブコメで言われてしまうよね。あと何も記述が無いから想像だけど、「それほど有能ではない」と判断された可能性もある。と言っても学生が思う「開発者として有能かどうか」ってのと会社でのそれってのは別物で、要するに学生自身が自分が実績もあって優秀だと思っても、会社的にはそうでないのよね。そうなると(後述の富士通に入社して10年が経った人の話にもあるのだけど)新人の能力の客観的な判断材料って大学と資格(応用情報レベル以上)程度なのよね。資格に関しても基本情報なんてMARCHクラス以上の人間なら受けたら取れて当然だから、「有能かどうか」の判断材料にならない。就活の際に本気でIT業界に入りたいかどうかの判断材料にはなる程度。自分の同世代で富士通本体に入ってソフトウェア開発関連に配属された人のプロフィールを見たけど、確か偏差値的には少なくとも神戸大学とか千葉大学あたりの修士卒しか居なかった覚えがある。あと確か2~3人がソフ開持ってた気がする。だから、この増田がどの程度だったのかなと。
ただ、20万人月案件が具体的に何かは判らないのだけど、自分の在籍していた当時でも炎上巨大案件というのはあって、(自分が知ってるのは確かデジタルテレビがどうのこうのとか言ってた)、そういうのに入社して間もなく入ってしまうと自身の勉強等が出来なかったり潰されたり最悪死んだりするんで、そういう意味でも逃げるのは正解の一つ。(自分は炎上案件に放り込まれた新人が寮で死んでたとか話を聞いたことある)
はあ、としか。この人がこう判断した際の判断材料にするであろう自己の体験を具体的に書いてないので、意識高い系がフカしてるようにしか見えない。あと、たった3年しか居なくてあの巨大企業の経営とか体制とか理解出来るんかね?と思わないでもない。自分とは部署が違うだろうから当然かもしれないけど、自分の体験とは違うなーって感じ。自分は、外から見たら馬鹿みたいな事やってるように見えるかもしれないけど、経緯や目的や巨大企業特有の問題があってそうなってるんだなって思う事が多々あった。
近い時期に入社したと思われる。具体的な話が自分の経験と一致してる。特に、富士通のソフトウェア開発と言えばミドルウェアの開発が主だというのは、富士通内部じゃないとなかなか(特に学生なんかじゃ)判らないかなと。
それでこれらの話を見てどんな人が富士通(というか大企業)に向くのかなと考えたんだけど、「やりたいこと」そこまで明確じゃないけどコンピュータは嫌いじゃないって感じで、地頭がまあまあ良くて勉強に関しても要領よくやれる(要するにそこそこの大学に行って卒業した人)、それでそこそこ安定した職・収入目当てな人かなと。ってコレ書いててふわふわしてる人みたいであんまり良い印象の人物像じゃないな。マッチングミスはどうしても起きると思うし、学生の頃に思う「やりたい事」って往々にして変わったり間違いだったりするし、そもそも学生の頃に明確な「やりたい事」がある人の方が少数派でしょ。だからこういうそこそこ優秀だけどふわふわしてる人の方が良いんじゃないかなとか。逆に、ちゃんと「やりたい事」が明確にあるけどまあ安定はしたいって人はどうしたらいいのかって言うと、自分みたく大企業の子会社を狙うと良いんじゃないかなと。子会社ならその会社がやってる事が理解しやすいし、入った後の配属の希望も大きく違ったものにはなりにくいし。まあ子会社は子会社で色々アルかもしれないけど。
入社は10年ぐらい前。入ったのは富士通の子会社で主にミドルウェアの開発をやっている所でした。入社して1~2年したら子会社の統廃合とのことで富士通本体と連携してる部署(自分がそうだった)は富士通本体になりますとのことで富士通本体の方に移ったという経緯ですね。別に待遇とか元々本体と同じだったから変わらず、事務関連が小回りきかなくなったぐらい。入社してから退職までは5年ぐらいでした。辞めた理由は実家の事業を継ぐ事にしたため。
入社して数ヶ月の時にある温泉地にある某所でその手の開発をやってる子会社沢山と
富士通本体のソフト開発配属の人達で研修をやったのだけど、その際に富士通本体の人達と知り合った。(この際に全員のプロフィール冊子が配られた)そのときは流石子会社に入る人達と本体とじゃレベルが違うな~と思いましたね。(ちなみに自分はMARCHより下の院卒。)
自分が配属されたのは某製品部署のAPI部分チーム。その製品がC言語やJava言語からも使えるように出入り口を用意する部分。中でやってる事は指定されたIPのポートにプロトコルに沿ってデータ投げるだけなんだけどね。ちなみに配属希望の際は「そこそこの忙しさの所がイイ」と言っていました。「バリバリに働きたい」と言ってた同期は多忙でヤバい所に配属されてました。他にもチームがいくつかあったけど、それらのうちの一つは例の「山奥の工場」でしたね。自分が配属された当時はC言語のAPIをリニューアルするって開発してたのだけど、設計担当がJavaしかやったことない人で色々とC言語の流儀に反してて後々のメンテが大変でした。まあそれでもリニューアル前よりは遙かに良くて、以前はユーザに見せてる関数名が ○○search1 ○○search2 ○○search3 とかでしたね(ちなみに機能はそれサーチか?思うのもあった)。もっと酷かったのが初期製品のJavaの公開メソッドで、マニュアルには「このメソッドの引数○○を□□を指定した場合は戻り値のObjectを△△にキャストしてください。××を指定場合は…」という「これ製品にして売ってたんだ…」と思うレベル。もちろんコレがダメだったってのは開発側も認識していて当時は既にリニューアル済みだったけど。リニューアル済みでも少し微妙だったけどね。
これは、ミドルウェアの開発をやってる人達って基本的にC言語が主でJavaとかをやってる人がほぼ居なかったからだと思う。上司もそういうのは良くないってのは認識してた。対象OSはWindowsとLinuxとSolarisだったけど、そんなにたいした事やってなかったからほぼ同じコードだったような。ソケットの一部だけ違ってたっけかな。
それでそのバージョンの開発が終わったあたりで、.NET Frameworkが出始めてきたので次バージョンでは.NET FrameworkのAPIを作る事になりまして、自分が少し勉強していたのでそれの設計から担当する事に。当時は.NET Framework 1.1で今思えば少し時期が早かったと思う。2.0でGenericが出てからやった方が良かったと思うんだけど、そういうの政治的判断だし結果論だしなー。それまでにRubyとかオブジェクト指向言語に触れてその辺の勉強もしていたので、.NET用のAPIに関しては設計も実装も結構良い感じに出来たと思う。ああ、そういえばRuby用のAPIも効率化の開発ツールとかの名目で仕事中に勝手に作ってたなあ。他にもC言語のAPIも内部実装がクソすぎ!とキレてユーザ公開関数インターフェースだけ同じで中身をフルスクラッチした事も。もちろん絶対にLDしてるんで完全に趣味なんだけどな。これでAPIはC言語とJavaと.NETになった訳だけど、現場の案件で使われたのってほぼ全てJavaだったと思う。(開発中のサーバのテスト用アプリはC言語だけど)。要するに自分が数年関わったコードが世の中ではほぼ使われてない訳でして、取りそろえとして必要だったとはいえ世の中の役に立ってないってのは嬉しくは無かったですね。まあ、大企業の仕事なんてそういうもんです。.NETに関してはそのバージョンが出る頃はその製品があまり売れてなかったんだか使われたって話は聞かなかったですね。ほほほ。大企業に勤めるのならこういう覚悟は必要かもね。
で、.NETのAPIが出来たあたりに開発ネタがなくなって保守気味になってきたので、人員整理と作業整理との事でインストーラと切りたいけど一度やったからには切れない補助製品の担当が増える事に。インストーラはWindowsがInstallShieldというクソみたいな言語上で作られたもの。LinuxとSolarisがシェルスクリプトでのもので、InsallShieldの方のコードはあまりにクソなのでリファクタリングさせてもらった。この辺の開発は少なかったのだけど新OS対応(Vistaとか)とか保守作業が大変だった覚えある。
んで、これらの作業が終わったあたりでこの製品でやることが無くなってきたのと同時に、この製品の派生製品の話が出てきてて、それは1機能1exeで提供されてて、それらを纏めるバッチ処理機能部分を担当することに。バッチ処理の内容・順番を記述するのにXMLを使う事になったのでXMLのパーサが必要なのだけど、色々調べたら富士通内部でパーサ作ってたのでそれをもらって使う事に。そのパーサはC++からじゃないと使えなかったのだけど、趣味でC++で勉強してたので何とかなった。あと、結構OSの知識(プロセスとか)が必要でWindowsとLinuxとSolarisで動くコードを書く必要があってまあまあ大変でした(と言ってもifdefで切り分けるだけなんだけど)。けど、これらの開発は自分が一から設計してコードを書いていたので楽しかったですね。それでこれが完成するかしないかあたりで、このバッチ処理機能が他の開発中の製品のバッチ処理に使えないかとか話が出てきたあたりで自分が退職する事に。(退職の話は1年ぐらい前に話し合って決定済み)引き継ぎをして退職ということになりました。最後は溜まった有給を使う予定でまだ在籍中だけど部屋を引き払って実家に帰ってたのだけど、打ち合わせに来て欲しいって言われてしまい実家から何日か通ったのは良い想い出。というかまさか実家から朝8時に間に合うとは思って無かった。
振り返ってみて残業時間は月40~60時間が多かったかな。100時間超えた時は上司に怒られた。あと退職前の1年ぐらいはうちの事業本部(だったかな?)単位で残業禁止になってホントに残業0時間になった時期があった。他の部署の人の話で、どう考えても狂ってる上司の話とかを聞いてると上司とかの運は良かったと思う。あと、やっぱり仕事でみっちりプログラミングが出来たのは運が良かったと思う。富士通のソフト開発で C C++ C# Java シェルスクリプト InstallShieldとか(そんなに深くはないけど)色々やれた人間はそうそう居ないんじゃないかな。同期とかの仕事は年上の人の派遣の人に指示出したり取り仕切ったりする仕事とか、保守サポートみたいな開発じゃない仕事の話も良く聞いていたので、ソフト開発のキモを体験出来たのは良かったです(こなみ)。
定数って、プログラム中で更新不可能で、いつ読みだしても同じ値が出てくるから、グローバルでも問題無いんだよ。
ストリームは定数だ、って言ってみたところで、プログラム全体から更新可能なんじゃ、グローバル変数と同じでしょ?
バグがあって、ストリームに変な値が入った時、どこがバグなのか、追跡するのが困難でしょ?
なんで伝わらないんだろ。
複数人でプログラム開発したり、他人のプログラムをデバッグしたり、したこと無いんだろうか。
「純粋関数型」とは何か、という話と、とOCamlでそれが推奨スタイルか、って別の話だよね?
岡部氏との争いって「OCamlでGUIアプリを純粋関数型(状態渡し)で簡潔に書けるか」ってところじゃないよね?
純粋関数型とは何かといった時にHaskellのように、IOも含めて引数と戻り値で表現する、関数のふるまいが関数の外の状態に依存しない、関数に副作用が伴わないとかの性質をいうと思うんだけど、岡部氏はFRPで状態を関数の外部に持ってても純粋関数型だ、と言ってて、そこで争ってるんだよね?
あと、OCamlでGUIを状態渡しで書いたら簡潔で無いのを「書けない」、「不可能」って言ってるのはわざと印象操作しようとしてるよね?
Haskellで書けて、OCamlで冗長になっても、書けるなら「書ける」、「可能」だよね?
その発言が事実か確かめる術はないし、ここで岡部氏攻撃しているのは君ひとりなのか?他の人間まで一連の誹謗中傷集団ではない、す駱駝、住井が含まれていないみたいに断言する根拠は何か?
ストリームを関数の外部に持つFRPを純粋関数型っていうのは少数派でしょ。
ユーザからの入力をリアルタイムに処理するプログラムにはFRPは有効だよね。
「OCamlでは」じゃないの?
全部純粋関数型(引数と戻り値に収める、状態渡し)にするのを良しとするHaskellと違って、OCamlは副作用も部分的に使うのが普通で、IOモナドみたいな入出力までも純粋に書くための道具立てが揃ってない、それでちょっと冗長になる、ってことでしょ?
OCamlの元々の推奨スタイルならもっと短く書けるんでしょ?
俺はそう読んだけど。
それっぽい書き込みほどそうやって、事実誤認だ、と強調するから、なんで当事者でもないのに、そんなことが断言できて、電波だということになるんだ?
だって駱駝でも住井でもない面識も無い俺の書き込みが住井扱いされるんだもの。
いやだから、どの関数で読み書きされようと、誰が書き換えようとも、時間にたいしてイミュータブルな定数なんだから、定数は定数なのよ。
「岡部氏のFRP」ではなくて、FRPっていうのはそういうもの。
俺も岡部氏のコード見ながら、この点考えてみたが、時間依存のFRPの値を__TIMEVALUEのようなひとつのオブジェクトにまとめて、逐一すべての関数の引数に加えれば?と思ったが、全部の時間依存の関数にそういうことをする意味はない、岡部氏のコードは、反対派ブログに書かれているコードよりも可読性が高く、コード量も半分とか圧倒しているし、「状態渡し」ではアプリは作れない、というのも岡部氏が正面切って批判するまで誰もはっきりと言わなかったことも反対派の信用性がない理由。それに「岡部氏のFRP」とか文句言う反対派の理解が怪しいと俺も思うようになった。
int main() { printf("Hello Masuda!\n"); return 0; }
コピペしたらインデント消えたわ…gg=Gでインデントなおさんと。
int main() { printf("Hello Masuda!\n"); return 0; }
そうじゃない…そうじゃないんだ…。
BSDスタイルでは戻り値の型の前にインデント入れたら駄目なので困った。
" tN Indent a function return type declaration N characters from the " margin. (default 'shiftwidth'). " " cino= cino=t0 cino=t7 > " int int int " func() func() func()
cinoptionsでこれを設定すれば解決できるのは知ってる。
http://officetanaka.net/excel/vba/tips/
http://www.happy2-island.com/excelsmile/smile03/
http://msdn.microsoft.com/ja-jp/library/office/ff194068%28v=office.15%29.aspx
直接欲しい答えが載ってなけりゃ、クラス名/プロパティ名/メソッド名やメソッドの引数や戻り値の型から仮説を立てて、コード書いて、ブレークポイントでオブジェクトの中身見て動作を確認して覚えていくしかないと思うよ。何やろうとしてるか分からないけど、Workbooks、Workbook、WorkSheets、WorkSheet、Range、Cells…等のクラスの仕様を詳しく理解するのが一番だと思う。
VBAに関しては、詳しい人に聞いて理解しようと思うのはやめた方がいい。
そんな人いないから。
readfile:
header('Content-Type: image/jpeg') とか header("Content-Length: ???"); とか、ちゃんと書いているのに、ブラウザでなんで画像で表示されないんだろ...もしくは " headers already sent by ... "とエラー表示されてる... readfile のあと、データ出力前にソッコーで header 出力させているのになぁ。。
こんなとき、そのPHPコード、readfile の戻り値が読みこまれたデータであると勘違いしてつくられてていませんか?
この件に限りませんが、サンプルコードとか勘違いが多いので要注意です。「脳内でうまく動いた」ものを、検証せずにそのままWEBに載せている人って結構いますから。
ほかには php.ini の output_bufferingを On にしたら直った、php のファイルが BOM 付き <?php や ?> の前後に空白や改行などがある、などが原因の場合もありますね。
多種多様なフレームワークやライブラリの使い方を覚えたりする必要ないから「言語を使えるようになる」ってのははっきり言って簡単だと思うよ。
でもCOBOLは色々大変だぜ?
以下の条件でプログラム作ってみ?ウンCOBOLの片鱗は味わえるかもね。
要件
入力ファイルA及びBのレコードのマッチングを行い、一致した場合はA又はBで持つコードに対応した値をマスタC、D及びEから取得して集計結果をファイルFに出力し、マスタから値を取得出来なかったレコードはファイルGに出力せよ。
作成上の制約
他にも色々あったけどもう忘れちった。思い出したくもねーけど。
IsCheckedに限らずメソッドの戻り値が指す意味がtrueかfalseかnullか、この3つにドンピシャに当てはまるならいいんじゃない?
必然、manalloc関数を必要とする。引数にはアナル拡張する直径mmを指定する。戻り値はアナル拡張によって得られた快楽指数「ヘゲナ」を返す。「ヘゲナ」はfloatの拡張であり、doubleの性奴隷である。decimalとは竿兄弟である。reanalloc関数も必要であろう。というのも、アナル拡張は必ずしも1度ではない、否、むしろリピーターが多いのではないか?おれはそう思っていて、やはりreanallocは需要がある。引数は2つ必要だ。拡張対象のアナルへのポインタ(どちらも表記は*だし実にちょうど良いと考える。C言語の創始者もそれを想定していたのではないか・・・?と思うほど、実に調和の取れていて、不気味に符合するのだ。閑話休題。2つ目の引数は再拡張するためのサイズを示す。ここではsize_tが型になる。tとは勿論ちんぽのことで、直径cmを意味する。しかし考えてみると、各種アナルを開放するfree関数は実に意味深だ。何から開放するのだろうか?ちんぽだろう。おれは、そう考えている。C言語は楽しいぞ。
しかし、なんで入門書とか、入門サイトっては、ああも説明がわかりにくいんだろう。
難しいというより、簡単に見せようとして自滅してる感と言うか。
例えば、先にラムダ式で (\ x -> x*2) みたいなのやって、次に複数引数がある場合として (\ x -> (\y-> x*y))
とかやってから、これは (\ x -> \ y-> x*y) と同じで、さらに簡易的な書式として (\ x y -> x*y) と書けるって順で
教えてくれれば、引数1の型 -> 引数2の型 -> 戻り値の型 みたいな表現も、すぐ理解できるし、
case of の文法見た後で、関数の説明してくれれは、関数のマッチングはcase ofによる表現を簡易的に書けるようにした
ものでしかないってわかると思うんだが、なんでラムダ式より先にマッチングパターン付きの関数から説明しちゃうかねぇ。
カリー化もラムダ式を理解すれば、それが自然な展開であることはよく分かるし。
モナドも、左式の出力を右式の入力にパイプ的に渡す演算子を定義して、左式の出力の結果を確認してから、
今のとこ課題は全部出せてる。
forとかwhileとか配列とかスレッドとかそういう技?みたいなのはなるほどってなる。
けど、書いたコードの説明に入って
プリミティブ型?とかキャストとかわけわかんない単語使いながら
用語解説必死に読んでも日本語と思えないことが書いてあって辛い。
iPhoneアプリの授業はインターフェスビルダーとXcodeの関係を結ぶところとか、
アクションメソッドでどういう動きさせるかはJavaの授業とリンクしててよくわかって楽しいんだけど
インスタンス解放とかアウトレット?とか戻り値とかデリゲートとか
アクションメソッドでどういう動きさせるか書いた下の方にあるコーナーに
先生がこの文入れといてください これはリリースしますとかわけわかんないこと言ってるのにしたがって文を写してて
これで本当に大丈夫か??ってなる。
どちらも同じ先生で、質問してもそのうちわかってくる!って言われるからそうか…ってほっといてるけど、
言語の詳しい説明はいつになったら理解できるようになるか不安になる。
自習の仕方もわからないし。
どうすればいいですか?
日本語でOKですいません。
PHP最新版がようやく正式に発表されましたね。新機能等について調べてみたので流行に敏感な人はぜひ今のうちから勉強しておきましょう。
「?>」を積極的に使うことにより、余計なホワイトスペースを混入させてしまう問題がありました。
これは厄介で非常に根が深い問題でしたが、ようやく根本解決として廃止されました。素晴らしいですね。
今後「?>」を使うとコンパイルエラーとなるので注意が必要です。
昨今抽象化抽象化と特に意味もわからず言葉だけ連呼する人間が増えてきました。しかし新PHP時代における抽象化はもはや人間が理解しなくてもできるようになります。
$class = abstract { $人間 = array('name' => 'yamada', 'age' => 20); $佐藤 = array('age' => 20); $動物->name = '花子'; $動物->type = '犬'; function move ($a) { $a->position++; } }; $class->move();
このような処理が、自動で抽象化され再利用できるようになります。もちろんクラス抽象化だけでなく、手続きやデータ構造であっても適切に自動で抽象化されます。
またcatch文を繋げる事で抽象化に失敗した場合を検出することが可能です。
php実行時オプションに強力な型チェックオプション(-compile)が追加されました。
$ php -compile example.php
そのスクリプトにおける全ての処理パターンを実行し、全ての型のチェックを自動で行います。その際、外部に影響を与えるような処理(ファイルへの保存等)は型チェックのみを行い無視されます。
この強力な機能のおかげでもはや静的言語の利点といわれていたコンパイル時の型チェックを軽く超えました。
動的言語でありながら、考えられる全ての型の引数、例外系を全ての関数の組み合わせで網羅的にチェックします(しかもチェック時間は長くても0.数秒という驚異的なチェック能力です!)
これが今回の目玉機能でしょう。
theworld { // 止まった時間の中を動けるのは$dioだけ $dio->foo(); $dio->bar(); };
$dioという特殊変数が用意されているのでその変数を使って処理をすることができます。
用途としては非常に重たい処理をさせるのがいいでしょう。実時間0秒で実行することが可能となります。
ただし9秒までしか止められないので注意が必要です。ですが回避策として以下のようにすれば追加で5秒止めることも可能です。
theworld { $dio->foo(); $dio->bar(); } starplatinum { // 9秒過ぎた時点でこちらへ $jotaro->foo(); };
名前空間(namespace)が非推奨になりました。これを使用するとE_NAMESPACE_YEN_ARIEHENという警告が発生します。
非推奨となった理由ですが明確にはされていません。大人の事情ってやつでしょう。
ただ噂レベルでは、やはりというか区切り文字の「\」がありえへんという声が多かったからではないか?と一部囁かれています。
mandomキーワードが非推奨になりました。mandomはきっかり6秒戻すという機能ですが、逆に言うと6秒きっかりしか戻せないので扱いづらいという問題がありました。
また以下のような処理を書いた場合に$flagがバグ等で常に真になるケースにおいて無限ループとなり、非常に危険だという問題もあります。
// 何かしらの処理・・・ if ( $flag ) { mandom; }
このようにPHP初心者がmandom使って無限ループをさせてしまう事案が後を絶たず、なかなか現実時間が進まないという問題が発生したため、廃止予定となります。
$mail = google_search_exec("メール送信するやつ",2); $mail("user@example.com");
第一引数は検索ワード。PHPというワードは自動で含まれるので指定する必要はありません。
第二引数は検索結果一覧の指定位置。2だと上から二つ目の検索結果のURLのコード小片を使うという意味になります。
また第三引数にはコールバック関数を指定することによりコード小片にフィルターをかけることも可能です。
このような処理がたった2行で書けるというのがPHPの利点ですね。
日本語名の関数が新たに追加されました。これは非常に便利な関数です。
$code = 写経(" $a = 1 + 2; print $a; ");
引数に与えられたコード片を写経します。戻り値に写経結果が返ってくるのでそれを利用するだけです。簡単ですね。
この関数が呼ばれると一瞬処理が止まったように見えますが、実際には自動補完で動作が完了している状態になります。
for($i=0;$i<10000;$i++) { if ( $i % 2 == 0 ) { chronostasis(); } // 何かしらの処理・・・ }
素晴らしい機能ですね。今後はこれ無しじゃプログラムできなさそうです。
用途ですが、言わずもがな今流行の真契約プログラミング用ですね。アサートの代わりに使うとよいです。
function foo ($a) { pc_explosion(!is_null($a),'$aはNULLはダメー!'); // 何かしらの処理・・・ }
テストコードを実行する場合はPCの周囲に人が居ないか気をつけてから実行させましょう。
個人的に良いなと思ったのはpc_explosion関数ですかね。約束事を守らないプログラマーなんぞ爆死しちゃえばいいんです。僕を含めて(お
1. そうなって欲しいこと・願望・コンセプトを得る。得ようと思っても得られない。ここは偶然起こること。
2. 何をするか・What・思い付きを挙げる。ブレインストーミング。
3. どうやるか・How・方法を考える。「できそう」という段階まで。
4. 必要なもの・使える技術・前例を集める。他人を説得できるようになる。
5. 機能・クラスといった実装上の分割、役割分担など行動に移すための細分化と割り当てを行なう。
7. やること別に「そのためにやらなければならないこと」を実行順通りに書き下す。擬似言語(擬似コード)
8. 擬似言語→設計→擬似言語にフィードバック、設計と擬似言語→実装
擬似コードを書くならアサーションも一緒に書く。不要な用語や用語の重複があるとうまくアサーションを書けない(かみ合わない)。用語の最適化は変数やコードの最適化でもある。
事前条件→事後条件をアサーションで表明、事後条件→他の事前条件へ連鎖。契約によるプログラミング(契約プログラミング)
擬似言語でのアサーションはそのままプログラムコードでもアサーションになるか、テストコードになるか、メソッド|関数|手続きのパラメーター・戻り値コメントになる。アサーションは「実行可能なコメント」(Executable Comments)とも呼ばれている。
RIGHT:[[:t/Prog]]
----
プログラムはclassに記述します。たとえばSampleという名前のclassを作る場合、Sample.csファイル内に次のように書きます。(C#の場合、ファイル名とクラス名は同一でなくても良い。複数のクラスを書いても良い)
public class Sample { }
プログラムはclass内のMainメソッドの先頭から実行されます。Mainメソッドは次のように書きます。
public class Sample { public static void Main( String[] args ) { // 処理を書く } }
Console.WriteLine( "Hello world" );
コメントです。
// 一行コメント /* 複数行コメント */
// 変数 int num;
データ型です。C#のデータ型には値型と参照型とがあります。以下は値型のデータ型です。
// int(整数)型 int num; // char(文字)型 char c; // float(単精度浮動小数点)型 float val; // double(倍精度浮動小数点)型 double val; // bool(論理)型 bool flag; // DateTime(日付)型 DateTime date;
以下は参照型のデータ型です。
// String型 String s; // 配列型 String[] array;
プログラムをコンパイルするには、コマンドラインで以下のようにします。
csc Sample.cs
プログラムを実行するには、コマンドラインで以下のようにします。
Sample.exe
mono ./Sample.exe
int、float、double型の変数に数値を代入できます。int型には整数だけ代入できます。float、double型には整数でも小数でも代入できます。
int i = 2; int i = 100000000; float num = 1.234f; double num = 1.234;
四則演算です。
num = 1 + 1; num = 1 - 1; num = 1 * 2; num = 1 / 2;
商の求め方です。割る数と割られる数が両方とも整数の場合、計算結果の小数点以下が切り捨てられます。
num = 1 / 2; // 0
割る数と割られる数のどちらかが小数の場合、計算結果の小数点以下が切り捨てられません。
num = 1.0 / 2; // 0.5 num = 1 / 2.0; // 0.5 num = 1.0 / 2.0; // 0.5
余りの求め方です。
// 余り mod = 4 % 2
インクリメントとデクリメントです。
// インクリメント ++i; // デクリメント --i;
String str = "abc";
// 結合 String join = "aaa" + "bbb"; // 分割 String[] record = "aaa,bbb,ccc".Split( "," ); // 長さ int length = "abcdef".Length(); // 切り出し "abcd".Substring( 0, 2 ) // abc // 検索 int result = "abcd".IndexOf( "cd" ) // 見つかった場合はその位置、見つからなかった場合は-1が返る
配列です。
// 配列の宣言 int[] array;
配列の生成です。配列の生成時には要素数を指定するか、初期データを指定します。
int[] array; // 要素数を指定して配列を生成 array = new int[5]; // 初期データを指定して配列を生成 array = new int[] { 1, 2, 3 }; // 宣言と同時に配列を生成 int[] array2 = new int[5];
配列の要素の参照と代入です。
// 要素の参照 array[0] array[1] // 要素の代入 array[0] = 1; array[1] = 2;
array_num = array.Length;
int[] from = new int[] { 1, 2, 3 }; int[] to = new int[5]; from.CopyTo(to, 0);
if文です。
if ( 条件 ) { }
if ~ else文です。
if ( 条件 ) { } else { }
if ~ else if文です。
if ( 条件 ) { } else if ( 条件 ) { }
while文です。
int i = 0; while ( i < 5 ) { // 処理 ++i; }
for文です。
for ( int i = 0; i < 5; ++i ) { // 処理 }
int[] fields = new int[] { 1, 2, 3 }; foreach (int field in fields) { // 処理 }
C#では関数をメソッドと言います。メソッドを作るには次のようにします。戻り値を返却するにはreturn文を使います。
static int sum( int num1, int num2 ) { int total; total = num1 + num2; return total; }
ファイル入出力です。ファイル入出力を行うには、プログラムの先頭に以下を記述します。
using System.IO;
以下がファイル入力の雛形になります。ファイルのオープンや読み込みに失敗した場合、catch節に処理が移ります。
String filename = "text.txt"; StreamReader reader = null; try { reader = new StreamReader(filename); String line; while ((line = reader.ReadLine()) != null) { } } catch (IOException e) { // エラー処理: } finally { if (reader != null) { try { reader.Close(); } catch (IOException e) { } } }
またはC#ではusing ステートメントと言うものがあり、この様にも書ける
String filename = "text.txt"; using (StreamReader reader = new StreamReader(filename)) { try { String line; while ((line = reader.ReadLine()) != null) { // 読み込んだ行を処理 } } catch (IOException e) { // エラー処理: } }
usingをつかうとCloseがなくなったことからわかるようにusing(){}を抜けるときに自動的にDisposeメソッドを呼び出し、オブジェクトを廃棄する。その分コードがスッキリするが、使いにくい場面もあるので考えて使うこと。
以下がファイル出力の雛形になります。ファイルのオープンや書き込みに失敗した場合、catch節に処理が移ります。
String filename = "text.txt"; StreamWriter writer = null; try { writer = new StreamWriter(filename)); writer.WriteLine("abc"); writer.WriteLine("def"); writer.WriteLine("fgh"); } catch (IOException e) { // エラー処理: } finally { if (writer != null) { writer.Close(); } }
こちらもusingを使って書ける。が、割愛する。
C#でよく出てくる知っておいたほうがよい文法の一覧です。
繰り返し文の途中で抜けるにはbreak文を使用します。
for ( i = 0; i < 5; ++i ) { if ( 条件 ) { break; // 条件を満たす場合、for文を抜ける。 } }
残りの部分処理をスキップし、次の繰り返しに進むにはcontinue文を使用します。
for ( i = 0; i < 5; ++i ) { if ( 条件 ) { continue; // 条件を満たす場合、残りの部分処理をスキップし、次の繰り返しに進む。 } }
例外を投げるにはthrow文を使用します。
throw new Exception( "Error messsage" );
try { // 例外が発生する可能性のある処理 } catch ( Exception e ) { // 例外発生時の処理 }