「戻り値」を含む日記 RSS

はてなキーワード: 戻り値とは

2023-12-29

anond:20231229001458

関数のもの変数に入れることができる

func1(何かの関数)を実行すると、その内部でwrapperという関数作成され、その関数戻り値になる

wrapperという名前はfunc1内部でのものなのでその外では使えないが、関数のもの戻り値として返却され、

funcという変数に入れられているので、変数funcを通してアクセスできる状態になっている

 

python知らんから適当だけど

2023-12-08

Tracer Bullet Development

開発手法でしっくり来てるのがAndy HuntさんのTracer Bullet Developmentで、開発の方向性を示すのに試作を作る方法

1. 主要なシステム オブジェクト定義UIサーバーロジックビットデータベース抽象化レイヤー等。

2. システム オブジェクトを介したデータ フロー定義

3. データフローを実現するために API とその戻り値コーディング

4. 単体テスト使用して API の予想される使用法を文書化。

5. 各 API必要な量の既定のデータ (別名、ダミー データ、偽のデータハードコーディングされたデータ) を追加して、API が「実行」されるようにする。

6. あらかじめ用意されたデータを実際の機能に段階的に置き換える。

7. コードリファクタリングし、システム オブジェクトを調整し、完了するまでこれを続ける。

実用上最小限の実装というプラクティスにも似ているが、ステークホルダーに動くサンプルを素早く見せられるのがポイント

2023-10-20

変数」じゃなくて「変値」だろ

「数」って書いちゃうとどうしても整数分数などでいう「数(かず)」を想起しちゃう

これだれが最初に言い出したの?

戻り値」「値を代入する」などというふうに普段いうのになんで「数」なんだよ。

これのおかげで関数オブジェクトを「変数」として扱う際の説明をするときに脱落する人がたくさんいるんだよ。

2023-09-26

anond:20230926183227

クソ現場だと「引数Xと引数Yを関数αに渡し、その結果と引数Zを足して戻り値とする」レベル設計書(を通り越した"実装書")が作られていることがある

2023-09-13

MSDNに嘘書いてあるのを目撃してから公式が書いてるドキュメントすら直ちには信用できなくなったわむしろ

ちなみに嘘書いてあったのはGetMessageのサンプルコード

BOOLで定義されているくせに戻り値解釈が3値というクソAPIである

2023-05-11

富士通事件の話

日付をファイル名にしていた問題なんだけど、

多分、ジョブ管理ソフトで主な処理はバッチを動かしてたんだろうなと思う。JP1かなぁ。Hinemosなワケない

要は親分フローを動かしてバッチ(Windowsバッチとかシェルね)を順番に動かす。で、戻り値が1だったら止めるみたいなことする。

で、問題はとにかくバッチプログラムが組みにくい。変な仕様なのかバグなのか分かんないやつだから

Pythonとかで組んでもいいけど大抵は秘伝のバッチの使い回しだよね

遅延展開とかバリバリ。読めたもんじゃない。でも他にソフトインストールしなくてもいいからみんなジョブ管理ソフトからバッチ使うよね

あと、Windowsバッチだとファイルロックできないのよね。せいぜい存在確認チェックくらい。バッチ管理ソフトも確かそれレベルしかできなかったと思う

ジョブ管理ソフト日本だけなのか外国製は知らない。AWSかにもあるけど、起動のたびにどこまで進んだのかとかの管理が難しいから使わない

2023-02-12

技術職がITパスポート試験を受けたのだけど

エンジニャーのおまいらはやっぱ、モドリッチサッカー選手)の名前を見たら”戻り値!”って言いたくなるの?

やっぱ、データベースを扱う時は”しゅきー!”って愛を叫ぶの?

2022-11-05

「【初心者向け】第2回 クソコードを書かないためのテクニック4選」という動画の内容がひどい

https://www.youtube.com/watch?v=yhDLmGpjdms

これよりもっとひどい動画ごまんとあるが、ここまでタイトルで煽っている以上指摘するわ。

全体を通じて

個別

プロフィール見るとCTOを経て独立してプログラミングスクール会社やっているっぽいけど、すごい時代だな。

晒しなっちゃったけど、他にも有名(と思われる)プログラミングYouTuberが実際にコードを書いている場合でひどいのはザクザク見つけられるから、見つけてため息をつくといいと思います

2022-10-06

anond:20221006214750

そうなんだ。

ちょっと調べたわ。

本筋と関係ないけど、戻り値

If MultiSelect is True, the return value is an array of the selected file names (even if only one file name is selected). Returns False if the user cancels the dialog box.

https://learn.microsoft.com/en-us/office/vba/api/excel.application.getopenfilename

ダイアログキャンセルするとFalseが返ってくるからIsArray()とかでガードした方が良いかもな。

あとは、用途に合うようならFor文じゃなくてFor Each文使うのも良いかもね。

anond:20221006212758

Application.GetOpenFilename()の戻り値がVariantの配列なのであれば、for文は0から始めるべきなんじゃね?

VBAインデックスまわりややこしかった気がするから自信ないけど

あとは他の増田が言ってるように、配列の要素数10とは限らないのであれば、配列の要素数(1始まり場合)か配列の要素数-1(0始まり場合)をfor文イテレータhの最後の数として指定するべき

2022-02-27

[]だけどjavaクラスオブジェクトメソッド勉強してンだが

メソッドで使う戻り値の型と引数の型が別の物になるケースってあるの?

仮にあるとしたら実務ではどういう時に使うん?

全く想像つかねンだわ

2021-11-17

GoMockテスト辛い問題とかDDDって何それうまいの?とか

GoMockってのはGo言語ライブラリで、依存するinterfaceテストモックに置き換えてくれる。

それで、テスト中のモックの期待される振る舞い等を簡単定義できるのだ。

期待される振る舞いってのは、モックメソッド呼び出しやその引数とかだな。

期待される呼び出しが無かったり、引数が違ったりするとテストが失敗してくれる。

他に、メソッド戻り値副作用記述できる。

非同期処理のテストだとよく、wg.Done()をモックにさせたりする。

正直、これまで書けなかったテストがモリモリ書けて楽しい

けれどそのうち辛くなってくる。

まり、たくさんのinterface依存するサービスオブジェクトメソッドテストしようとすると、たくさんのモックのたくさんのメソッド呼び出しの全部の期待される振る舞いを書かないといけない。

モックメソッド戻り値によってサービスオブジェクトメソッド内の挙動が変わる。

すると連鎖的に、メソッド内で続いて呼ばれるモックに期待される挙動も、変わる。

依存interfaceが増えるとこの場合けが指数関数的に増える。

当然だ。

Go言語にはテーブルリブテストっていう、テストケースは配列簡単にまとめられると良い、という慣習・哲学がある。

しかし俺のサービスオブジェクトテストケースが肥大化複雑化しすぎてしまったようだ。

モックの期待される挙動を細かくケースに分類して配列にするのは恐ろしく辛い作業だ。

やりたくない。

どうしてこうなった

どうしてこうなったかは明らかだ。

サービスオブジェクトが巨大すぎるのだ。

ノシリックで巨大で複雑なものは凡人には扱えないからやめとけ、と偉い人は言う。

そうだなモノシリックは辛い。DDDかにすればいいんだろ?

やったよ(見様見真似で)。

モックでこれまでできなかったテストが書けるのはいいね

でもじつはここはまだ山麓だったのです。

サービスオブジェクトが巨大なモノリス化してしまったのです。

分け入っても分け入っても青い山。

おれはどこに行けばいいのだ。

参考文献

https://little-hands.hatenablog.com/entry/2020/12/22/ddd-in-first-3month

あとどこかにDDD100本ノックとかないかな。

2021-08-16

【未経験から1ヶ月で】現役エンジニアが教える最良のプログラミング勉強法

プログラマーに憧れる皆さん!こんばんは。

自分文系から」「未経験から」と諦めていませんか?大丈夫です!プログラミングセンス不要です。正しい手順で学べば、文系や未経験でも、誰でも一流のプログラマとして活躍することができます

今日は、未経験から最短でWeb企業就職するための勉強法をご紹介します!

オススメ方法

もっとオススメ方法は、顕正会セミナーに参加することです。

顕正会は、日本で最大のエンジニアコミュニティであり、非常に良質なテキストを用いて、プログラミング初心者向けのセミナーをしていることで有名です。顕正会に入ることで、未経験からでも一流エンジニアノウハウを学ぶことができます

また、意外と知られていませんが、日本エンジニアの8割は顕正会出身です。実はあのひろゆきビル・ゲイツ顕正会出身です。ですので、顕正会ネットワークを介して就職先を斡旋してくれたりしますし、自分顕正会員だと、面接時にも非常に有利になります

顕正会セミナーは、インターネットからも応募することができますし、秋葉原などで声をかけられることもありますので、誰でも簡単に参加できます。会員もフレンドリーな方ばかりですので、是非、お気軽に応募してみて下さい!無料体験もできますよ。

準備

プログラミング勉強を始める前に、まず、必要ものを準備しましょう。必ず必要ものと、できればあると良いものは以下の通りです。

必ず必要もの

まず、プログラムを書いて実行するためにパソコン必須です。

可能な限りスペックの高いものを買いましょう。2021年現在であれば、CPUは18コア、36スレッドRAMは128GBくらいはあると良いでしょう。ストレージSSDであれば1TBもあれば十分です。

OSは、Windowsで開発するならWindowsが、Macで開発するならMac必要です。よく分からなければMacを買っておく方が良いでしょう。基本的MacにできてWindowsにできないことはありません。

インターネットは、この記事を見ている人は既に持っているでしょう。ただし、モバイル回線で見ている人は、自宅に有線のインターネット環境を用意した方が良いです。

顕正会に入会すれば、上記スペックPC無料で貸し出ししてくれます。また、法人向けの専用線無料で取付工事を行ってくれる上に、通信費を全て負担してくれます

できればあると良いもの

まず、他の会員と連絡を取るために、SNSアカウントを持っていると良いでしょう。

最近は完全にPC上での学習もできますが、やはり、勉強の基本は紙のノートに直接書くことです。医学的にも、手指の動きと脳の記憶回路が関連していることは証明されており、手を動かすことで効率的ものを覚えることができます

Kindleなどの電子書籍リーダーは持っておいた方が良いです。紙の本は時代遅れです。いやしくもITプロを目指そうという人間が、このような最先端デバイスを使っていないのは恥だと思うべきです。紙の本を買わないことは、環境を守ることにも繋がります現金も持つのはやめましょう。

自宅での学習

せっかくセミナーに参加しても、受身聴くだけでは、プログラミング習得することは難しいです。ここでは、自宅でどのような勉強をすればよいのか、ご紹介します。

教科書写経する

まずは、教科書参考書写経することから始めましょう。教科書参考書の本文を一字一句正確に書き写すのです。

よく、「写経理屈を学べないからだめだ」と批判されますが、まずは正しい「型」を体に覚え込ませるのが先です。野球水泳などでも、細かい理屈よりも先にフォームを固めるのと同じです。書き写している内に理屈自然と身に付きます

また、写経メリットは「飛ばし読み」を防げるところです。一字一句正確に写経をすれば、細かい部分を「分かったつもり」になって飛ばししまうことを防げます。たとえば、比較演算子の等号は=ではなくて、==です。プログラミングはこういうところに注意して学ばなければいけません。

ソースコードフローチャートUML)に変換する

教科書サンプルコードノートに書き写したら、それを今度は自力フローチャートUML)に変換してみましょう。そうすることで、自分が本当にそのコード理解しているのか、確かめることができます

フローチャートUMLが素早く正確に描けることは、プログラマーとして働く上で非常に重要スキルです。それらはソフトウェア設計の基礎となりますし、ソースコードを読めない営業顧客にとっては貴重な資料となるからです。プロエンジニアは、COBOLソースコード10万行を1週間でフローチャートにして、Excel転載することができます

ここで一つ注意すべきことがありますフローチャートを描くときは、必ず専用の定規を用いて描いて下さい。フリーハンドで描いたもの業務ではフローチャートとは認められません。これはまともな企業就職すれば研修などで必ず習うことですから、今の内に覚えておきましょう。

Excel勉強する

エンジニアを目指すのであれば、プログラミングだけではなく、Excelの使い方も学びましょう。Excelエンジニアにとっての万能プラットフォームです。エンジニアはあらゆる作業Excelで行いますセル結合や罫線を用いて、見栄えの良い資料を作る技術は、エンジニアにとって必須です。

プログラミング学習中であれば、たとえば以下のような題材の資料を作ってみると良いでしょう。

尤も、以上の資料は、ツールを使うことで自動作成することもできます。たとえば、ソースコード更新履歴Gitなどのバージョン管理システムを使うことでも管理できますしかし、それらの資料としてのクオリティは非常に低いため、アマチュアしか使うことはありません。プロを目指す皆さんは、必ずExcelを使いこなせるようになりましょう!VBA習得必須です。

プログラミングのコツ

以上、プログラミング勉強法について解説しました。ここからは、実際にソースコードを書くときのコツを紹介していきます。他のプログラマと差をつけることができる技術ですので、意識するようにして下さい。

変数名は短く

プログラムで使う変数名は可能な限り短くしましょう。

理想は、aやxなどの一文字です。ただし、これだけだと26文字しか使えないので、a1, a2, ...のように連番でグルーピングすると良いです。

また、変数宣言使用箇所が離れた場合に、変数の型がすぐに分かるように、たとえばint型であればi1, i2, ...、string型であればs1, s2, ...のように命名すると、読む人に親切で自分ミスしにくくなります

変数名を長くするのは、以下のデメリットがあるため、絶対にやめましょう。


なるべく関数を作らない

多くのプログラミング言語には、クラス関数といった機能がありますが、これらは基本的ライブラリ提供者などが使う想定の機能であり、一般プログラマが使うのは好ましくありません。したがって、クラス関数はなるべく使わないようにして下さい。

関数を作ると、以下のデメリットがあります

不要関数を作らないためのテクニックには、以下のようなものがあります

まず、関数引数に「フラグ」を渡し、関数内部で処理を切り替えれば、1つの関数複数の処理をすることができます

function f(i) {
  switch(i) {
    case 1:
      // i = 1のときの処理
      break;
    case 2:
      // i = 2のときの処理
      break;
    case 3:
      // i = 3のときの処理
      break;
    // ...
  }
}

この方法は、以下に述べる「変数寿命を伸ばす」効果もあります。つまり、この関数内で宣言された変数は、すべての処理で共通して使用することができます

クラス不要関数を作らないようにするには、「継承」を用います複数クラスで用いる関数定義したクラスを1つ作っておき、そのクラス継承すれば、新しいクラス関数定義する必要はありません。

理想的には、プログラム内のすべての関数を同一のクラス定義し、それを継承するべきです。そのようなクラスは俗に「神」と呼ばれ、プログラマからはこの上なく尊ばれています

class God {
  f1() {
    // 関数1
  }
  
  f2() {
    // 関数2
  }
  // ...
}

class C1 extends God {
  // 何も書かなくても上の関数が使える!
}

class C2 extends God {
  // 何も書かなくても上の関数が使える!
}
// ...

変数寿命を長くする

変数宣言する場所によって、ソースコードのどの範囲から参照できるかが決まっています。この範囲が広いことを、「変数寿命が長い」と言います

たとえば、以下のコードのaは、関数定義の外側からは参照することができません。

function f() {
  var a = 1;
  return a;
}

一方、以下のコードのaは関数の内外どちらからでも参照することができます

var a = 1;

function f() {
  a = 2;
  return a;
}

変数寿命を長くするのは、プログラマの腕の見せ所です。

せっかく作った変数がすぐに死んでしまうのは、非常にもったいないです。ソースコードの表面には現れませんが、変数を作ったり捨てたりするのには、計算コストがかかります。したがって、寿命の短い変数を作りすぎてしまうと、プログラムが遅くなってしまます

また、変数寿命が長いということは、変数をたくさん作らなくても、1つの変数を色々なところで利用できるということであり、とても便利です。たとえば、上記の前者のコードでは、関数の外部からaの値を参照したくなっても、参照することができません。後者のように書いておけば、プログラムのどの箇所からでも、aの値を参照したり、更新することができます。したがって、変数寿命を長くするとプログラムを変更しやすくなります。つまり保守性が上がります

例外を潰す

例外とは、プログラムが予期しない処理をしようとした場合に、プログラムの実行を停止し、呼び出し元にエラーを通知する機能です。たとえば、「test.txt」というファイルを開こうとしても、そのファイル存在しない場合は、例外となります

例外が発生すると、プログラムが停止してしまうため、非常に困ります。したがって、プログラマ例外をきちんと処理しなければなりません。

ほとんどのプログラミング言語には、例外処理のための機構があります。たとえば、以下のような構文です。

try {
  // 例外が発生し得る処理
  // ex. ファイルを開く
}
catch (e) {
  // 例外が発生したときに、実行する処理
}

例外への対処は実はとても簡単です。是非ここで覚えて下さい。上記のような機構のある言語であれば、catch節の中身を何も書かなければ、例外が発生しても、何事もなくプログラム動作を続けます

try {
  // 例外が発生し得る処理
}
catch () {}

全ての例外を潰せば、決して不慮の動作で停止することのないプログラムを作ることができます。ですから例外が発生し得るコードは、積極的上記try-catch構文を用いて、例外を潰すようにしましょう。

おわりに

全体的に専門用語盛りだくさんの記事になってしまいましたが、

部分的にでも理解すればプログラミングを見る目が変わるはずです。

うさんくさい記事インターネットには多いですが、

そういう情報に惑わされずに本物の技術を身につけてもらえればと思います

2021-05-19

バグ脆弱性(セキュリティホール)の線引

ワクチン大規模接種東京センターの予約システムで発生した、適当数字入力しても予約できるシステムの不備はバグなのか脆弱性(セキュリティホール)なのかを考えていこう。

もし、脆弱性であるとするならば、しかるべき報告フローを取る必要があるからだ。

記事の末尾に参考リンクをいろいろおいておいたので、詳細は確認してほしい。

この問題は、本来するべきチェック処理をしていないのだからバグ一種といえる。

// ただ、改善する気がないのなら仕様となるのだろうけどね。

あるゆる、脆弱性バグの結果起きる。

では、適当数字を入れても予約できちゃうバグは、脆弱性(セキュリティホール)と言えるのか?

もし、脆弱性(セキュリティホール)となるなら、ゼロディでいきなり公開する前に、しかるべき報告フローを取るべきだ。

// ただ、新聞社は、ネットで噂になったもの取材して報道しただけであるからゼロディで公開とは言えないだろうけどな。

個人的意見としては、脆弱性とまでは言えないと思う。

これはタダのバグであって、脆弱性(セキュリティホール)と呼ぶのは言い過ぎだろう。

例えば、教科書レベルの「"<script>alert("XSS");</script>」でXSSを発生させる意図的入力をして、誤動作が発生するなら、それは間違いなく脆弱性(セキュリティホール)といえる。

同様に、SQLインジェクションを発生させる意図的入力をして、何か変なことが起きれば、これも間違いなく脆弱性といえる。

他にも、超でかいデータを送りつけてバッファオーバーフローさせたり、特殊入力をしてスタック破壊して戻り値改ざんして任意コマンドを実行するみたいなものも同様に脆弱性と呼んでもいいだろう。

(注:念のために書いておくが、不正アクセス違法になる可能性があるので、自分の所有するサイトコンピュータ以外へは、これらの入力を試さないように。)

でも、ごく普通入力をしても、エラーとしてはじかないで受け入れてしまうのは、脆弱性ではなく、タダのバグであるように思う。

「こういう操作したら、計算結果が変になった」はバグ領域であって、脆弱性とまでは言えない。

今までの話を簡単に言うとしたら、ドラクエ4で8回逃げたら会心の一撃連続して出るのはバグなのか脆弱性なのか?って話になるのかな。

かに、8回逃げることで、データバッファオーバーフローが発生して、そのような結果になる。

でも、8回逃げるというはやろうと思えは誰でもできる動作であって、これをバグではなく脆弱性(セキュリティホール)と呼ぶのは違和感がある。

この裏技を見つけたとして、脆弱性としてしかるべき報告フローを取らずに公開したこと咎められるとしたら、実に変な話である

これら裏技を試しても不正アクセスと言われて、罪を着せられたり、裏技記事を削除されるとしたら、強烈な違和感がある。

このあたりのバグ脆弱性の線引はどうなっているのか。

今回の事件で、それが一番気になった。

最終的には、裁判裁判所が決めることになるんだろうけど、あまりアホな判決を出して、日本エンジニアの手足を拘束しないでほしいと思う。

参考URL:

ドラクエ4で「にげる」8回でずっと会心の一撃になるバグ、こういう仕組みで起こってたらしい

https://b.hatena.ne.jp/entry/s/togetter.com/li/1715732

■「誰でも何度でも予約可能ワクチン大規模接種東京センターの予約システムに重大欠陥

https://b.hatena.ne.jp/entry/s/dot.asahi.com/dot/2021051700045.html

岸信夫 on Twitter: "自衛隊大規模接種センター予約の報道について。...

https://b.hatena.ne.jp/entry/s/twitter.com/KishiNobuo/status/1394440062125805572

脆弱性の手口、IPA「見つけたらまず開発者IPA窓口に報告して」 コロナワクチン架空予約巡り

https://b.hatena.ne.jp/entry/s/www.itmedia.co.jp/news/articles/2105/18/news145.html

Hiromitsu Takagi on Twitter: "私はこの届出制度の提唱者・設計者・運用協力者・有識者研究会委員であり、IPA広報取材にこんな回答をしたのであれば、出鱈目であり、...

https://b.hatena.ne.jp/entry/s/twitter.com/HiromitsuTakagi/status/1394713619212816385

ワクチン大規模接種「架空ウェブ予約」やったら犯罪? 国は「法的手段」に言及

https://b.hatena.ne.jp/entry/s/www.bengo4.com/c_23/n_13071/

確認作業公益性高い、毎日新聞 接種センター架空入力取材目的

https://b.hatena.ne.jp/entry/s/this.kiji.is/767285347672670208

AERA dot. 記事への防衛省の申し入れに対する見解

https://b.hatena.ne.jp/entry/s/dot.asahi.com/info/2021051900065.html

2020-11-26

go言語アプローチだとerror関数戻り値なので、戻り値を受け取らない関数呼び出しという

一見何の問題もなさそうに見えるコードが、error握りつぶすというよくない挙動を引き起こす。

 

throw-catchアプローチならばerror握りつぶすには意図的にそれを行うためのコードを書かないといけない。

かといってerror戻り値を必ず受け取らねばならないよう言語仕様制限を入れると、

かつてJavaが犯してしまったように例外処理がめんどくさすぎることになる。

 

もしgo++言語を作るとしたら、これはどのようにするのが正解なんだろうか。

2020-05-23

anond:20200521175300

どもども。

「なにか作ってみろ」は有効アドバイス

わたし意見と経歴

わたしは「なにか作ってみろ」系の言説にはまったく同意しません。

わたし自身会社に3ヶ月間みっちり導入教育をしてもらい(COBOL85とPL/I時代がわかる……)、基本的アルゴリズムコントロールブレークマッチング、マスタ-トランザクションソートマージetc.いよいよ時代がわかる……)の演習を(給料をもらいながら)やって、その後もプログラムとつかず離れずでフラフラと生きてきました。

こういう経験新卒カードがあるから有効もので、では1から始めるとしたら……、というときに、プログラミングスクール専門学校)というのは悪くない選択肢ではないかと思います。が、行ったことないので正直わかりません。

実際自分が1から始めるという立場になったら、まったくオロオロして元増田さんのように世のなか(の気にいらないヤツら)に呪詛を吐いて満足するだけだったと思います(当然ながらそれをいくらやってもプログラミングは上達しません)。

「なにか作ってみる」前に動機をはっきりさせる

話をプログラミングだけに限っていえば、一番大事なのはやりかたじゃなくて動機だろうと思います

「なにか作ってみよう」というのは、なにか作ってみようと思ってない人にはまったく心に響かないでしょう。

動機リブンで「なにか作ってみた」人といえば思いだすのは、MikuMikuDance樋口優さん(ミクを簡単に踊らせたい!)とhinadanの若宮正子さん(高齢者にも遊べるゲームが欲しい!)でしょうか。

ただかれらはわたしから見れば(モチベーションを維持しそれを行動に移す)天才で、あんまり参考にならないのも確かです。

作ってみた」は就職に使える経験

あと、元増田さんの動機は「プログラミング生業にしたい」ということなので、野良プログラマでは履歴書上でのアピール力が弱いかも、と思います

ビジネスで使われるアルゴリズムにはそれなりのルールがあります安全な(バグの出にくい)コードの書きかた、「車輪の再発明」はぜず、枯れた(将棋で言えば定跡のような)アルゴリズムを使う、ほかの人に使ってもらえるための工夫(可読性の向上など)、etc.です。

「なにか作ってみよう」を繰りかえしても、そういった作法的なものが身につくかどうか、それは才能に関わってくる問題だと思います。才能だのみの手法を推奨するのは無責任だと思いますね。

また、たとえば「例をコピーして解析する」というのもある意味有効プログラミング学習法ですが、「下手に習うと下手が伝染る」ともいいます。どれがお手本として優れているか、それを見る目はある程度ビジネス用途プログラムに関わっていないと持てないというジレンマがあります

野生のプログラマ就職有効なくらいの力を見せるとしたら、なにかのコミッター(なにする人かよく知りませんが)とかになって「××ならこの人」となったり、プログラミングコンテストで上位の成績を残したりしなければいけないのかもしれません。

どうしたものでしょうね。ブクマカのみなさんの反応を見ると、専門学校でもあまり就職に有利にならない(ホントか?専門学校意味あるのか?)という話ですが、目的就職ならば、一番の近道のような気がします。

じゃあどうすべきか?は他人にはわからない

そこらへんからは、元増田さんがなにをしたいか、あるいは聞いてみたいだけだったのかによります仕事には適性とやる気が大事です。あとは年齢と必要性かな。進路はオーダーメイド以外にはありえないので、提示された案を自分で選んでそれに賭けるしかないのかな、と思います

「なにか作ってみました」の記録

自分がまず作ったもの晒してみろよ

さて、この文章は実はこの一文に反応してのものです。(↑のは前書き)

GWあたりからトシも考えずにRubyの再入門をしていまして、手始めに「首相動静」の整形ツールを作ってみました。

初心者で(Rubyに関しては仕事で使ったことないので)なにか作ってみよう、というとこの程度ですね。

これで就職に有利になるかというと、あんまりそうは思えないなあ。Excelマクロが組めるとかのほうがどこかの事務所に潜りこめそうですよ(でもそれも最近インフレ気味かもしれませんね)。

なにをするツール

朝日新聞首相動静は詳細ですが、改行が入っておらず、大変読みにくいものです。こんな感じです。

首相動静の例(2018年12月11日……話題になったものです)

 【午前】9時31分、自民党本部。33分、同党役員会。10時2分、官邸。5分、閣議。21分、宇宙開発戦略本部。34分、柴山昌彦文部科学相。38分、岩屋毅防衛相。41分、山下貴司法相。11時3分安全保障と防衛力に関する懇談会

 【午後】0時11分、政府与党連絡会議。44分、山口那津男公明党代表。1時27分、日韓議員連盟額賀福志郎会長河村建夫幹事長。2時20分、行政改革推進会議。52分、兼原信官房副長官補、秋葉剛男外務事務次官。3時36分、麻生太郎財務相財務省岡本薫明事務次官太田主計局長。4時7分、太田氏出る。可部生理局長加わる。15分、全員出る。25分、黒川弘務法務事務次官。34分、谷内正太郎国家安全保障局長、北村内閣情報官宮川内閣衛星情報センター所長。41分、谷内、宮川両氏出る。5時3分北村氏出る。10分、東京永田町ザ・キャピトルホテル東急宴会場「鳳凰」で中曽根康弘世界平和研究所設立30周年記念式典に出席し、あいさつ。20分、官邸。6時18分、ガーナのアクフォアド大統領を出迎え。記念撮影。19分、儀仗(ぎじょう)隊による栄誉礼、儀仗。27分、アクフォアド大統領会談。7時12分、署名式、共同記者発表。32分、公邸首相主催の夕食会。8時43分、アクフォアド大統領見送り。9時、ヨルダンのアブドラ国王電話協議

首相動静フォーマット

ただ、これはフォーマットがはっきりしており、

  • 午前と午後はそれぞれ1行になっていて、行頭には【午前】/【午後】という文字列が付いている。
  • 午前と午後の間には空行がある。
  • ひとつひとつイベント時刻表示で始まり句点「。」で終わっている。
  • 時刻は「h時m分」型で、前ゼロはつかない。後にかならず読点「、」が付く。「h時」の部分が前の項目と同じ場合には省略する。
  • 午前いっぱい、午後いっぱいの予定の場合には時刻をつけない(他の首相動静から)。

と、例を見るかぎりキッチリとしたルールに則っているようです。

動機

なので、「これだったら整形できるかも」と思い、再び学びはじめたRubyで整形ツールを作ってみることにしました。

整形ツール
ツール仕様
整形後の例(上記動静を整形)

【午前】

09時31分、自民党本部

09時33分、同党役員会。

10時02分、官邸

10時05分、閣議

10時21分、宇宙開発戦略本部

10時34分、柴山昌彦文部科学相

10時38分、岩屋毅防衛相

10時41分、山下貴司法相

11時03分安全保障と防衛力に関する懇談会

【午後】

00時11分、政府与党連絡会議

00時44分、山口那津男公明党代表

01時27分、日韓議員連盟額賀福志郎会長河村建夫幹事長

02時20分、行政改革推進会議

02時52分、兼原信官房副長官補、秋葉剛男外務事務次官

03時36分、麻生太郎財務相財務省岡本薫明事務次官太田主計局長。

04時07分、太田氏出る。可部生理局長加わる。

04時15分、全員出る。

04時25分、黒川弘務法務事務次官

04時34分、谷内正太郎国家安全保障局長、北村内閣情報官宮川内閣衛星情報センター所長。

04時41分、谷内、宮川両氏出る。

05時03分北村氏出る。

05時10分、東京永田町ザ・キャピトルホテル東急宴会場「鳳凰」で中曽根康弘世界平和研究所設立30周年記念式典に出席し、あいさつ。

05時20分、官邸

06時18分、ガーナのアクフォアド大統領を出迎え。記念撮影

06時19分、儀仗(ぎじょう)隊による栄誉礼、儀仗。

06時27分、アクフォアド大統領会談

07時12分、署名式、共同記者発表。

07時32分、公邸首相主催の夕食会。

08時43分、アクフォアド大統領見送り

09時00分、ヨルダンのアブドラ国王電話協議

う~ん、見やすい!ことないですか?

あと、午後の時刻を24時間制にしたいな、とも思いますが、それは今後の課題(つぎに首相動静話題になったとき)とします。全角数字計算ってどうやるんだろう?

ソース

たぶんRubyistにいろいろ突っこまれると思うけど、こんな感じです。

プログラマ玉石混淆ですが、これは石のほうの例だと思っていただければさいわいです。

はてな記法にはシンタックスハイライトあるけど、増田だとInternal Server Errorになるのではずしました。見にくくてスマソ。

# encoding: utf-8
# 漢字コンバータライブラリを取りこむ(String漢字変換メソッドを付けてくれる。神)
require 'kconv'

# 正規表現パターン
# 時刻をh時m分形式からhh時mm分形式にする
# 否定後読みを使用する
# 時は行頭にある
OneDigitHour = /^((?<![0-1])[0-9]時)/
# 分は時のあとにある。このパターンマッチすると、\1が時、\2が分になる。
OneDigitMinute = /^([0-9]{1,2}時)(?<![1-5])([0-9]分)/
# 分のない、時だけの行のパターン否定先読み使用
HourWithoutMinute = /^([0-9]{1,2}時)(?![0-5]?[0-9]分)/

# 行頭のh時m分をhh時mm分にするサブ処理(これは関数といっていいの?)
def convTopHourMinute2TwoDigits(oneLine)
    # 時を変換
    oneLine.sub!(OneDigitHour, "0\\1")
    # 分を変換
    oneLine.sub!(OneDigitMinute, "\\10\\2")
    # 分がない場合"00分"を追加
    oneLine.sub!(HourWithoutMinute, "\\100分")
    # 戻り値
    oneLine
end

# 入力ファイル名前
InputFilename = "首相動静2018年12月11日.txt"
# 出力ファイル名前
OutputFilename = "首相動静2018年12月11日_編集済.txt"

# 入力ファイルオープン
inFile = File.open(InputFilename, "r")
# 出力ファイルオープン
outFile = File.open(OutputFilename, "w")

# 時刻パターンシンプルに、h時、m分、h時m分、という3パターンを結合する
# 1つのパターンで全部カバーするよりこちらのほうが見やすい。というか、脳の容量の問題で1文に書ききれなかった
jikokuPattern = /[0-9]{1,2}時[0-9]{1,2}分、|[0-9]{1,2}時、|[0-9]{1,2}分、/
# 午前/午後
ampm = /(【午前】|【午後】)/

# 午前/午後、あるいは時刻の前で改行するためのパターン
kaigyouSign = Regexp.union(ampm, jikokuPattern)

# ファイル一括読み込み
# 昔は1行ずつ読みこんでました。メインメモリが3MByteとかだったので
contents = inFile.read.toutf8

# 入力終了。閉じておきます
inFile.close

# スコープ関係から、ここでローカル変数に代入
# ※ Rubyスコープと暗黙の型には泣かされました。これに慣れるのがRubyのコツかしら
#  明示的な型宣言はあったほうがいいと思うなあ。エラー出力の理由がわからなかったりするので。
hour = ""

# デバッグ行はコメント化しています
# 時刻パターンチェックのため、コンテンツを出力してみる
# p jikokuPattern.match(contents)

# エントリを改行サインで行に分ける
contents.gsub!(kaigyouSign, "\n\\&") # "\\&"はマッチした文字列のもの。2重のエスケープ"\\"が必要

# 改行チェックのため出力
# p contents

# 入力を行で分割して各行ごとに処理
contents.split("\n") do |oneLine|
    # 午前/午後を示す開きカッコ"【"があるか
    if (oneLine =~ /^【/) then
        # そのまま出力
        outFile.write(oneLine + "\n")
        # p "午前午後:" + oneLine
        next
    # 空白行は無視スキップする)
    elsif (oneLine =~ /^[\s ]*$/) then
        # 出力しない
        # p " 空白行:<skip>"
        next
    # 行頭に「時」があるか
    elsif (oneLine =~ /^[0-9]{1,2}時/) then
        # あったら時間表示を抜きだしておく
        hour = oneLine.match(/^([0-9]{1,2}時)/)[0]
        # p "   時:" + oneLine
        outFile.write(convTopHourMinute2TwoDigits(oneLine) + "\n")
        next
    else
        # 「時」がなければつけて出力
        oneLine = hour + oneLine
        # p "普通の行:" + oneLine
        outFile.write(convTopHourMinute2TwoDigits(oneLine) + "\n")
    end
end
感想

手でやったほうが早いね

以上

2019-06-04

anond:20190603165611

単純な分岐処理だったら、関数戻り値について「何を」「何処から」取得するかによって俺は決めてるなぁ。

コード内に直接記述、または定数化されてる値を返す場合は「get

オブジェクトマップリストなんかを新しく生成して返す場合「gen」

外部ファイルから取得したデータを返する場合は「load」

ってな具合。

2019-05-20

ユニットテストって引数省略時の戻り値テストも書くの?

GitHubで公開する程度の、多くて10人くらいが関わるプログラムと想定

おしえて増田

2019-05-17

この本、クラスの話が10章まで出てこない

いわゆるmain関数自作プライベート関数を呼ぶだけのコード構造がなんか200ページ近くある

初心者向けに写経公開しまブログみたいなの作って「ここは実はテストを作ると楽です」みたいなTips書いてアフィで10億円くらいゲットして不労所得で暮らそうと思ってたんだが

プライベート関数戻り値標準出力するmain関数しかないんじゃ初心者向けの記述ではどうにもならんなコレ

えっ単に可視性変えてユニットテスト書くよう仕向ければいいんじゃないかって? 何言ってるんですかプライベート関数ユニットテストしないんですよ

2019-04-05

anond:20190404140637

全体的に「解説」というよりは「注意事項」を重視してるっぽいですね。

「この注意事項をみんなに伝えなければならない」という使命感を感じます

解説を重視するのなら説明する順番も考えるべきでしょう。

いきなり「関数」と言っても伝わらない可能性は十分あります

関数?なにそれ?数学嫌いなんだけど?」といった感じで。

関数さえ分からないような人間プログラミングには向いてない」

と切り捨ててもいいですが、先にGOSUBを説明しておけばより分かりやすいハズです。

まず一番最初は「GOTO」を説明しましょう。

GOTO指定した行(ラベル)にジャンプするだけのとてもシンプルな仕組みです。

GOTOが分からない人はさすがにほとんどいないでしょう。

次に「GOSUB」を説明します。

GOSUBはラベルジャンプして処理が終わったら元の場所に戻ってきます

GOSUBもほとんどの人が理解できるはずです。

GOSUB(サブルーチン)まで説明すれば「プログラムブロック毎に分ける」感覚が分かります

GOSUBまで説明した後に関数説明すれば

関数はGOSUBみたいなものか」

「でもGOSUBとはここが違うんだな(引数戻り値など)」

「だから関数には()がついているのか」

という風に理解できるはずです。

呪文」を使わず解説するなら現代でも最初BASIC無難かと思います

2019-02-16

メーカーSIer作成したソースコードが酷すぎる

メーカーSIer(仮にF社とする)が過去作成したJavaソースコードを読んでいるんだけど、非常に読みにくい。

適切な単位メソッドとしてくくりだすことができていない

  • 1つのメソッドの行が多すぎる(いわゆる神メソッド)。数百行/1メソッドとかがざら。ほんとにざら。何なら10000行/1メソッドとかがある。読めねーよ。
  • 制御文のネストが深すぎる。for{if{if{if{for{if{}}}}}}とかがざら。ほんとにざら。何なら50多重ネストとかがある。読めねーよ。
  • 意味単位メソッドでくくりだしてくれない。if( /* ここに10行くらいにわたってなんかの式が書かれている */ ){}とかがざら。ほんとにざら。

命名適当すぎる


英語ができない


まとめ

これ読んでメンテナンスする身にもなってくれよ...。

もう疲れた

2018-11-25

PHPerのコンプレックスは異常

ぼく「OOP…」

PHPer「PHPはもはや5系の頃とは違う!別言語と言っても良い!(フンガー!」

ぼく「お、おう。。どの辺が変わったの?」

PHPer「致命的エラー例外投げるようになった!戻り値の型を指定できる!匿名型が使えるようになった!」

ぼく「へ、へえ〜。。結構OOPやすくなってそうだねえ。。(他のOOP言語にはふつうにありそうな機能ばかりだけどな...)」

PHPer「だからRubyはクソ!」

ぼく「???

2018-06-24

プログラミングのコツ(初歩)

「一つの関数には最小限の役割だけ与える」

「一つの関数は長くても20行以内に収める」

「できるだけ引数で受け取った値を戻り値に返すように書く」


これ、学校とかで教えておいてほしいコツだった

これ知った後、自分みたいなアホでも割と大規模なプログラム簡単に、

全容を把握しつつ読みやすい内容でかつ増築やすくなった

たぶんあらゆるプログラムに通じる基本的ことなんだろう

その割に過去読んだ教本では触れられてなかった気がする

心掛けるだけでだいぶ躓きにくくなるだろうからぜひ基本の知識として最初らへんに教えておいてほしい

2017-11-10

おっさんメソッド引数なしで長くなる理由

どうやら「メソッド細かくして~戻り値変数作って~引数渡しして~」という行為が面倒くさいというか短期記憶で処理しきれなくなるようだ

引数なし戻り値もほぼなしのメソッドが5行くらい並んでる(使うデータや出力されるデータは外部のどっかの広域変数に置いてある)、というのはその間に何か挟まれるとカタマリとしてわけがからなくなるから

過去おっさんメソッド/サブルーチンが長いのは現代プログラミングに触れてない世代だったからという解釈があったのだが、ぶっちゃけ加齢が主原因であった


40歳になったからわかったわ

2017-09-24

anond:20170924130812

IntelliJデバッグ停止中にマウス乗っけるとメソッドチェーンのメソッド部分ごとに戻り値を表示してくれたりしなかったりするな

最初はなんて賢い子なんだと思ったけど意外とそこで詰まることがないのでいまいち使わない機能だった

めんどくさそうな処理は本能的にメソッドチェーンよけてバラして書いちゃうから

静的言語だと途中にローカル変数があってもなくてもあんま変わらんから

ログイン ユーザー登録
ようこそ ゲスト さん