「サブルーチン」を含む日記 RSS

はてなキーワード: サブルーチンとは

2023-12-16

語彙がなくてググり方がわからない

ので、有識者が多いであろう増田質問させてください。

複数機能で成り立っている長いコードを分割して実装することののメリット/デメリットを教えてほしいです。

コードの分割」が指してることを大まかに言うと、「メインの関数は各機能を呼び出すだけで、実際の機能の部分はサブルーチンとしての関数(って表現が正確かも謎)に持たせ、サブルーチン順次呼び出すことで総体としての機能を成す」ような方式にするってことです。

より具体的に言うと、1.データの取り込み2.取り込んだデータ突合3.帳票の出力の3手順を別々の関数とし、メインの関数から1,2,3の手順の関数順次呼び出すという具合です。

上記方法と、全ての機能を詰め込んだ一つの長い関数にする方法と、どちらが結局よかったのかなと思っているんですね。

今のところ私は自分のわかりやすさのためにコードを分割する書き方をしています理由は、1機能1関数で分けておいた方がステップインじゃないですけど「ここまでは完走できた」の切り分けがやすいのかなーと思うのが一つ。もう一つは単純に上下に長くなっていくとどの変数がどれでと特定していくのが辛いってのがあるためです。

ただこの方法にも問題があると思っていて、一番はメイン/サブ関数間で右往左往するので今やってる工程が何なのかがよくわからん他人が読むならなおのこと、ってことです。一応の対処として、メインの関数は目次的に「総体としてこのような機能を持っている、また分割した関数機能はそれぞれこうである」とコメントアウトし、サブの関数にも「この関数はここからここまでの作業します」とコメントアウトすることにしています

あとは関数ごとに変数をいちいち定義し直すのがだるいみたいなのもありますね。グローバル変数は後々の修正とかのために使わないようにしています

自分では思いつけてない部分でコード分割することのやばみってあるのかなーと思ったので質問させていただきました。近々退職する予定なので、他人への引継ぎって観点からどうなのかなと思っています

以下自分語りです。語彙とか概念インストールが足りないと適切な調べ方ができなくて困るんですねー。あと問題があることを認識できなかったり効率悪かったり車輪を再発明したりとか。

私は無学のバイトなんですが、あるとき上長から「暇なら適当エクセルでも勉強しといて」と漠然と言われて、このVBAっちゅうもんを学べばええんか?と勘違いしたのが始まりでした。本当はセルの結合とか別のセルを参照するとか、エクセル方眼紙的なものをある程度作れるようになってほしかったらしいです。折角なのでなんとか役に立つものをと思って、ある集計作業自動化させたところ、今後も暇なときよろしくということになりました。

いろんなもの作りましたが何をどのように作るかから、その後の運用保守までほぼ一任してもらって大変面白かったです。しかしなにぶん仕様実装方法について相談できる方がおらず全ては私の泥縄式学習術によって成り立っているという恐ろしい状態でした。体系的な知識組織経験知みたいなものが一切ないので自分がどこにいるのか、努力方向性が合ってるのかも結果が出るまでわからない。先達のあらまほしきことなり。

しか社会ってこんな素人が作ったもの業務用として堂々と使うんですねー。勉強になりました。

2023-08-13

anond:20230813185851

引っかかる記事なんだよね。環境設定ファイルの読み込みをするときって、けっこう警戒するプログラマーって多いと思うけどなー、と思った。フランス語というよりも、文字列の数値変換って気を使うよなー、ってね。どこで使うん、そのサブルーチンは?と考えてしまう。

2022-06-23

anond:20220622231602

この議論には相互性がない。あなたと同じように、相手のほうも相手でメインルーチンを走らせており、時にあなたを含む他者サブルーチン的に利用しているのだから

まりあなた側の視点だけで関わり合いのある他者機能的に命名してしまうと、あなたというドメイン内での局所的な命名のような命名が、同時に動作しているメインルーチン数だけ存在することになり、命名管理コストが爆発する(というか、事実上、できない)。他者あなたにとってのサブルーチン)が、あなたが定めた局所的な命名規則によって呼び出されることを保証できないのなら、それはプログラム的な意味での「呼び出し名」として成立していない。

よって、一意性がある命名を用いて、どのようなドメインからでもおおむね目的サブルーチンの呼び出しを可能にしていることには、合理性がある。増田のような視点で言えば、会社役職である「総務課長」や「営業主任」などは、相手が司る機能性に着目した命名とも言えるが、そうした役職は同時に複数存在しうるので、個別インスタンス指定して呼び出すには、やはり一意性がある命名を利用することが合理的だ。

また、他者の「機能」は自分との関係で変化する。機能が変わるごとにサブルーチンとしての他者呼び方を変更することは、両者がドメイン(たとえば家庭)を共有している場合は低コスト可能だが(たとえば子供ができたあとに互いを「パパ・ママ」呼びするなど)、そうでない場合は、機能が変わるたびに命名を変えるのは、メインルーチン側から見ても合理的でない。

人間他者との相互通信コストを最小化するには、「他者機能命名して、変更があった場合は頭の中でテーブルを書き換える」より、「お互いにユニークに定められたマシン名を直接叩く」ほうがよいのだ。

2022-06-22

他人概念(or機能)で把握するので、他人名前が覚えられない

他人のことを「経理の人」「困ったときに頼る人」みたいに認識してしまうため、他人名前が覚えられなくて困っている。

職場では、相手首にかかる職員証を視線動かさずに見ることで、何とか対応してる。)

というか、そもそも論だが、なんで他人には、私が把握する概念(or機能)に即した名称が付いていないのだろう。

例えば、あの「○○さん」は、本当の名前が「経理の人」だったら、私が個体認識するのに、なんて便利なことだろう。

私の認識する概念名称が一致して、非常に覚えやすい。

まあ、そんなことが無いのは当たり前だとわかってはいるんだが。

しかし、そんな(私にとって)機能的でない名前なんて辞めればいいのに、改名すればいいのに、

と、毎日親切にしてもらったりしながらも、心の中ではこっそり腹立だしく思ってたりする。

だって自分の中のプロトコルとして、他人だってプログラムのように、概念機能認識できるような名称であった方がいい。

他人なんて、私自身というメインルーチンに対するサブルーチンであって、概念機能を把握しやす名称が付いていた方が私にはわかりやすい。

私にとって異質な名称(=その人本来名前)だと、いちいちその他人というサブルーチン機能確認しないと、

このサブルーチンって何だっけ?どれを使えばいいんだっけ?となって時間がかかる。

まりは、私にとっては「経理の人」という機能サブルーチンなのに、

なんで、「○○さん」とかい意味不明ルーチン名になってるの?みたいな感じの謎を毎日感じてしまっている。

そう、他人名前というのはまさにプログラム内の名称と同じなのだ

他人名前も、サブルーチンとしての機能的に適切な名前であるべきなのだ

サブルーチンメリットは、そのルーチン内の雑多で長いコードマスクすることに意義があるのに、

その機能をいちいち確認しないと使えないなんて、まさに本末転倒

それは、私というメインルーチンを走らせながらも改修する日常の大きな妨げにもなる。

まあ、普通の人は頻出のサブルーチン(=他人)なら、自然名前を覚えていくんだろうけどね。

あーあ。私はそれもできないんだよ。

他人にも、私の好きなように機能名で名付けできたらいいのに!

プログラム内の名称みたいに!

追記

うお。なんかトラバ超増えてる。

からかい上手の高木さん方式で覚えるしかない

二つ名をつけるといいんじゃない

稟議のヤマダ」

「困ったときタナカ

なるほど。これいいね。やってみる。(本当に口に出してしまいそうだけど。)

まりあなた側の視点だけで関わり合いのある他者機能的に命名してしまうと、あなたというドメイン内での局所的な命名のような命名が、同時に動作しているメインルーチン数だけ存在することになり、命名管理コストが爆発する(というか、事実上、できない)。

それはたしかに。

それなら、メインルーチン(個人)ごとに、局所命名と本当の人名とのリストを持っておき、

個人命名を呼べば本当の人名自動翻訳される機能があればいいのに、とか思った。

プログラムに直接通信先を書くのを避けて疎結合にする時みたいなイメージ

あと、機能が変化するごとに名称が変更されるのも、個人的には(呼びたいように呼ぶ感じで)別に構わないんだけど、相手はまあ、普通に戸惑うんだろな。

あとは、トラバにあるカースト制の話とか、ブコメの「ベイカーベイカパラドックス」っていう言葉とか、知見が増えて嬉しいです。

2022-05-21

anond:20220521082738

「色々あったが、」 ← 1個しかなかったレジスターが2個に増えて、ブランチするときに戻るアドレスを保管できるようになった。これのおかげでサブルーチン実装できるようになった。昭和28年頃だが(´・ω・`)

2021-09-26

オブジェクト指向流行り始めた頃

手続き型が主流でひたすら頭からだらっと書いてあって、せいぜい「サブルーチン」に処理が分けてあったくらい。 Web だと .cgi に全部書いてある。

そういう世界では、こういうまともな書き方もあるんですよ、という紹介ができる良いものだった。今はどんなに酷くても当時よりまともなだけ。

現代オブジェクト指向話題になるたびにもやもやする。もう語らなくていいんだよ。いいんでしょう…?

2021-03-17

慣用句」は、世界というプログラム圧縮化するためのサブルーチン

この世界のあらゆる事象が一つのプログラムで表せたとしたら、そのコードの長さは相当なものになるだろう。

慣用句」は、人々がそれを理解するために生み出したコード上の工夫のひとつだと思う。

その世界というコードの中で頻出する部分、すなわち、生活で多用される言語を「慣用句」としてネーミングする。

その処理内容はサブルーチンとして別扱いとすることで、メインプログラム圧縮できる。

まり世界というプログラムの可読性は高くなる。

サブルーチンを呼び出す際には、その関数名には処理内容を想起させるような象徴的な用語を用いることにした。

まさにそれが、世界というプログラムにおける「慣用句」という象徴的な用語の在り方なんだと思う。

よって、関数である慣用句」を、文脈という名の変数とともに呼び出すだけで、

その処理内容を明示しなくても意味のあるアウトプットになるわけだ。

私たちが「慣用句」の処理内容をよく知らなくてもちゃんと使えるのは、慣用句集が一種ルーチン集だからだろう。

そして、人々は「慣用句」というルーチン集によって、世界というプログラム理解しようとしているのだ。

2020-06-05

anond:20200605173819

4人に一人なんだ。

いい環境なんだな。

しろ適切にモジュールサブルーチンに分けられてるコードを見たことないわ。

エラーチェックとエラー表示が分けられてないから、エラーチェックのロジックの使いまわしができなくて、このロジックだけ括りだしていいですか?とか提案しても「なに意味不明なこと言ってるんだ。コピペすればいいだろ」みたいな反応しかないわ。

2020-05-21

コードの書き方とかもうすこし座学を充実させたほうがいいんじゃない

知らんけどプログラミングスクールとか専門学校とかプラクティス的な教育が中心なんでしょ?

新卒現場に放り込まれて、現場に転がってるコードをお手本にして育って、リーダブルコードに書かれてるようなお作法に触れてないプログラマってコードがひどいよね。

まあ「コメントはしっかり書きましょう」程度のことは知ってるけど、方向性おかしくて、装飾がやたらと多い凝った書式のコメントを書くのに命をかけてたり、情報量ゼロコメントを大量に書いて満足してるとか、そんなのになりがちだし。

クラスとかも、同じような目的で使うサブルーチンをとにかく全部つっこんで「これ、クラスじゃなくてネームスペースつかうところじゃね?」みたいになってたりするし。

全部のメソッドcatch (Exception e) で括って「絶対に落ちないプロコード」とか誇らしげだったりするし。

2019-11-22

特定言語しか使えない人って

プログラミングをどう理解してるんだろうね。

発言語は基本的PHPJavascript職場

大昔に作られたVB6製のツールを見てくれって頼まれた。

かにVBのわかる人がいないからって。

別に複雑なコードでもないし、PHPJSでも、まがりなりにもコードを書いてる人なら見ればわかるでしょって感じなんだけど。

スマホアプリ作るときも、JSならだれでもメンテナンスできるからってmonacaかいJSアプリが開発できるやつを採用したけど、Webとはアーキテクチャが違いすぎるから結局一部の人間にしか触れなくて、そんなマイナープラットフォーム採用した意味なかったし。

ちょっとしたツールを作るときも、Windowsアプリとして作ったほうが使い勝手いから、VB.NETかC#で作ろうって話になってもベテラン勢が猛反対して、無理やりPHPWebアプリとして作ることになったし。

サーバーで使うシェルスクリプト(.sh)も未経験の俺が、ネットチョコチョコとググって改修して、すごいびっくりされたことがあるけど、こっちからすればなんであんたらは触れないかっていう感じだし。(黒魔術的な書き方もあるらしいけどもちろんそんな書き方ではない)

Windowsサーバーで使う .BAT ファイルを書くときに、.BATファイル仕様では黒魔術的なテクニックを使わないと実現できない仕様だったからほかの言語しませんかって提案したけど、.BATでないとほかの人が保守できないからと却下

無理に.BATで書いて、逆に変なテクニックを駆使した保守性皆無のコードになってたし。

どの言語を使うかって話題になると、自分の使ってる言語以外を使うとアイデンティティ崩壊するかのような勢いで反対する。

Haskellみたいにまったく思想の違う言語ならともかく、似たような言語で、かつifとループ配列サブルーチン概念を把握していたら理解できるような書き方しかしてないコードでも、普段使ってない言語って時点で理解不能に陥るんだよな。

2019-09-04

クラスメソッドサブルーチンの違いは?

C#勉強中。

クラスでつまづいてる。

メソッドは良く分からない。

サブルーチンは、もらった材料を加工するための場所だと思ってる。

料理で例えたりできるのかな?

少し考えてみようと思う。

出来たら書いてみるからNG判断よろしく

2019-06-04

anond:20190604143136

ああそういうことか

と思って手元の手ごろなソースを見てみたら判定用の関数なんて組まずに

その例でいうとグラボ名をgetしてそのままメインのロジックで判定してからそれぞれのサブルーチン呼んでたわ

1000ステップぐらいしかないバッチプログラムだし仕方ないね

2019-04-05

anond:20190404140637

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2019-04-04

anond:20190404165512

いやいや、アセンブラを学ぶのに半加算器の知識不要でしょw

というか、論理回路知識すら要らない。せいぜいBooleanくらいでじゅうぶん。

知っていると便利なのは、ALUとか、レジスタとか、メモリーとか、アドレスとか、バスとか、I/Oとか、ポインターとか、スタックとか、その程度かと。

サブルーチンを呼ぶとスタックにリターンアドレスを積んで云々、、、を知っているだけでイメージがわくし。

anond:20190404135821

GOSUBというと、何かの古代言語で使われていたような気が.....

Fortranだっけ? サブルーチンとか言ってるし.....。

anond:20190404034812

>>なんで増田の都合上半角がダメなのか、そのうち想像できるようになろう。

こういう煽り別に必要ないですよね?

これだけ長文なら関数のあたりでサブルーチン(GOSUB)のことも触れておきべきでは?

あと「RubyとかPython」でなぜRubyを選んだんですか?

2019-01-21

anond:20190121093829

入力と出力を持たないサブルーチンって処理分割以上の意味を持たないか

(どうやってテストしたんだよ)

分割されていようがされていまいがバグ潜在性は全く変わらんぞ。処理がつかみにくくなる関係修正難度は飛躍的に高くなるけどなw

anond:20190121093535

意味はあるよ。

行数が10行のコードより、1000行のコードのほうがバグが含まれてる可能性が高いとか、ifが1個しかまれてないサブルーチンより100個のサブルーチンのほうがバグを含んでる可能性が高いとか、その程度には。

2018-11-09

”今後必要になる〜”の著者がうちの派遣おっさんだった

かなり興奮しているし酔っているので要領を得ないかも。

今日急にうちに派遣で来てるおっさんに飲みに誘われて、会社の近くの安い居酒屋につれていかれた。

なんで誘われたかというとこれもうまく言えないのだが、チームや全体での飲み会で近くにいることが多く、不幸なことに自分が少し聞き上手だからかもしれない。

とにかく席についてビールが来ないうちに、人をばかにしたような半笑いで話を切り出された。

おっさんが持っている10年も前にあったようなガラケーメモ帳画面を見せられ、君になら理解できるだろうとかクィータとかいサイトにはろくな人材がいないとかブツブツ言っていて、俺はメモの中身を読み進めているうちに顔が引きつっていくのがわかってなぜか記事自体よりもそのことで笑いが止まらなくなりそうなった。

しばらく自分はどうすればいいのか知らないふりをするべきか、なだめたほうがいいのかまじでわからなかったのだが、結局記事の本意を聞きたい好奇心には打ち勝てなかった。

ちなみに自分仕事場ではWinXPが現役で動いている。派遣おっさんも含め会社がそういうカラーだと言えば伝わるだろうか。

自分趣味でReact(ないしReactNative) とかで家計簿アプリを作っているし、Androidも(それこそJavaでだが)やっていてちょっと新しい技術は知っているというレベルである

・「マスター言語」について

端的に言うと「必修」という意味で使ったらしい。ルー大柴かおまえは。いや意味が通ってないしルーに失礼か。

JavaJavascriptが同列になっている点について

どうやらプロトタイプベースオブジェクト志向という意味をはきちがえている。

まりJavascriptはオブジェクト指向言語プロトタイプとして生まれ言語であり、完全オブジェクト指向言語(これも意味がわからなかった)のJavaとは切っても切り離せない関係であると思っているらしい。もう自分はここらへんから笑いが変な声で漏れる笑いを堪えられなくなっていて、喘息気味なんですとかアホな言い訳必死ごまかそうとしていたんだけれど、この派遣おっさんに対してそこまで気を使っている自分にも笑いが止まらなくなってまあなんというか、おもしろかった。

RubyJavaサブルーチンとは

Rubyが(というかRORが?)動作が遅いという話をどこかで読んだか聞いたかしたらしく、そして動作が遅いかわりに処理がしっかりしている(現文ママ)という位置付けの言語だと思っているらしい。正確性が必要な処理はサブルーチンにしたRubyに投げるべきだとかなんとか。

パッセンジャーよりもエンジンクスにひもづけるべき(現文ママ)とか言っててもうビールがまずくて仕方ない。

MSDN

自分MSDN学生時代にVisualC++とかで使ったことがあって、デスクトップアプリ用のライブラリだとずっと思ってたんだけど、違うんですかね。(無知

MSDM(何度聞いてもエムにしか聞こえない)の逆アセンブリ言語C++だとか、ここの話は輪をかけて本当に何言ってるのかわからなかった。

ねこのことを考えて耐えた。

SQL

あんま深く考えてなかったらしい。言語名前がついているか言語のくくりに入れた、くらいのスタンス

ちなみになぜか、使ったこともないらしいSQLiteで配列型を使えないことは知っていた。

と、ひと通り聞きたかたことを聞いた後、もうなんか疲れ果てたのでビールを半分残して帰った。

よほど調子が悪く見えたらしく、おっさんはひどく自分のことを心配してくれた。ごめんおっさん

2018-10-21

普通プログラマ関数型プログラミング絶対理解できない

実を言うと、普通プログラマオブジェクト指向以前のプログラミング理解できないんだけど、あれらはまだ手続き的な要素を内在してるから、そっちだけを受け取ることはできる。

それまで手続き的な要素+宣言的な要素だったプログラミングが、関数型プログラミングへと移行する時に手続き的な要素を切り捨てたのね。より純粋手法進化するために。

から、それまで手続き部分だけを受け取って喜んでた普通プログラマは急にわからなくなりヒステリーを起こした。

だけど、プログラミング上級者はオブジェクト指向以前にも宣言的な部分しか見てないか普通プログラマが何を騒いでるのかわからない。

普通プログラマって、部品化の凄いやつが関数型プログラミングになるとか勘違いしがちだけど(staticおじさんもその変奏)、全く質の違うもの

部品化って、重複コードをひすたらサブルーチンに括り出すようなもの副作用がある。

日本SIer(日立NEC富士通とか)って教養がない極東田舎者から副作用理解できない。すぐに「部品化」を持ち上げる。怖いんだろう。自分理解できないプログラミングが。モナドですら大多数は理解できないんだものあん教科書的なものですら。

とにかくアジアってIT後進国なのね。トップ日本ですらこうなのだから。"NTT"データHaskellレガシーシステム脈絡なく解析してホルホルしてるレベルもの

まず日本に生まれた時点で、関数型プログラミング理解するには圧倒的に不利。こんなこと言うと、「普通プログラマにもわかやす説明できるのが一流ダー」みたいな恥ずかしい駄々っ子が沸いてくるけど、プログラミングって歴史上一度も大衆相手にしてないので。

昔は研究機関IBMで、今はMSGAFA

OSS恩恵で、普通プログラマコンパイラ無料で使えるようにになっただけで泣いて喜ぶべき。

そしてあれは、将来のスポンサーコミッタ入り口としてやってるの。1000人に1人、将来コミュニティに貢献する人材いるかもしれないと信じて。

シリコンバレー住人にもOSSコミッタにもなれない普通プログラマはまあ、おこぼれで"文化的"コスプレしてQiitaでもやればいいんだと思うよ。

anond:20181021093430

2018-10-12

プログラミング本質カプセル化ブラックボックス

コンピュータマシン語命令文もデータも数値で表す。これは今も昔も同じ。

数値だけでは人間管理しづらいので命令文を mov や add のようなわかり易い単語に置き換えたのがアセンブラ

(わかりづらい数字人間理解やす英単語に置き換えた)

アセンブラも規模が大きくなると人間には管理しずらくなる。

そのため人間言語により近い高水言語が生まれた。

if や for などで制御をわかりやすくした。

複数の処理をひとまとめで扱うサブルーチン関数プロシージャ・ファンクション

いったものができた。

(処理の流れをわかりやすくした、構造化、カプセル化

複数データをひとまとめで扱うレコード型や構造体生まれた。

カプセル化

コードデータをまとめて扱うクラスができた。

カプセル化抽象化

アプリケーションからOS機能を呼ぶシステムコールAPIが生まれ

ブラックボックス化)

複数クラスコードデータをひとまとめにするにモジュールができた。

カプセル化

プログラムを外部から操作するRPC、CORBA、SOAPRMIができた。

リモートから操作ブラックボック化)

WebAPIアーキテクチャーを超えての疎結合が進む

さらなるブラックボックス化)

IaaS / SaaS / PaaS を使いネット上のサービスにつないでシステムを構築する。サーバ管理不要に。

ブラックボックス化)

CIツールサーバ数台〜数百台を1人で扱えるようになった

操作の簡略化)

DockerWEB/DB/KVSなどをまとめてコマンド1つで扱えるようになった。

カプセル化抽象化

プログラミングとはわかりづらいマシン語人間にわかやすくするのが本質

カプセル化ブラックボックス化・操作の簡略化は正義

2018-06-24

サブルーチン20行以下で書けって言ってる人をたまに見るけど、本人は実践してるのか疑問だわ。

初心者に変なことを教えるのはやめてほしい。

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