質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.26%

  • Python

    4192questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

ソースファイルの分割の目的について

受付中

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 82

esakyohum

score 6

今まで自分は競技プログラミングや簡単な開発系をしており、あまりソースファイルの分割を使っていなかったのですが、
ソース分割の内容も学んでおこうと思い、調べていたのですが、
ソース分割の目的がいまいち理解できなかったというか、疑問に思ったところが多々あります。
今回はpythonでのソース分割について聞きたいです。(ソース分割は言語によって違うかはわかりませんが...)

1,c言語ではソース分割==自作関数をまとめたやつというイメージが強かったのですが、そのようなイメージであっているのでしょうか?
mainのファイルがあって、それにsubファイルを付け加えるというイメージですが...どうなのでしょうか?

2,ソース分割はソースとソースの連携としてのみ使うことはできないのでしょうか?
1とは違って、main>subではなくどちらもmainとして使うみたいな
例.Aという通信を行うモジュール(ソースファイル)があったとして、A内で通信やその他をすべて終わらせ、必要なデータだけをBというモジュール(ソースファイル)に送り、なにか問題や操作等があったら、Aに送り(フィードバックし)処理を行いBにまた送る。といった、AとBを完全に独立させ、パイプか何かでデータだけつなげるというやり方もあるのでしょうか?

いかんせん混乱しており、日本が不十分な個所もありますが、教えてください

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

1,c言語ではソース分割==自作関数をまとめたやつというイメージが強かったのですが、そのようなイメージであっているのでしょうか?
mainのファイルがあって、それにsubファイルを付け加えるというイメージですが...どうなのでしょうか?

『そのような使い方が出来る』のは確かです。
ただ、ある程度保守しやすいコードを書くなら、役割に注目した分割をする必要があります。


2,ソース分割はソースとソースの連携としてのみ使うことはできないのでしょうか?
1とは違って、main>subではなくどちらもmainとして使うみたいな

Pythonなら可能ですね。
例えば次のようなモジュールを作ることが出来ます。

def hoge():
    print('hoge')

if __name__ == '__main__':
    hoge()
C:\...>python hoge.py
hoge

C:\...>python
>>> import hoge
>>> hoge.hoge()
hoge

Cで単純に同じことをやろうとすると、main関数が競合してしまいます。


Aという通信を行うモジュール(ソースファイル)があったとして、A内で通信やその他をすべて終わらせ、必要なデータだけをBというモジュール(ソースファイル)に送り、なにか問題や操作等があったら、Aに送り(フィードバックし)処理を行いBにまた送る。といった、AとBを完全に独立させ、パイプか何かでデータだけつなげるというやり方もあるのでしょうか?

具体的な方法はさておき、Bが通信に携わらなくて良いのは良い構造だと思います。
ただ、パイプ処理よりも直接モジュールをインポートした方が素直でしょう。

  1. 『こんな風に使えたら便利だな~』と妄想する。
  2. Aを作る。とりあえずインターフェースの要求だけ満たせば良い。
  3. Aを利用するBを作る。

BはAがある程度しっかり動作することを前提に組むことが出来ます。
一方、Aは実際どのように呼ばれるかを意識しないで組むことが出来ます。

通信に関する機能を向上させたいならAだけを修正すればいいですし、
具体的な処理を変えたいならBだけを修正すればいいです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

オブジェクト指向に則って設計して、コードが数千行を超えれば、ファイルを分割してモジュールで書くほうが自然になります。
Pythonではたくさんのライブラリを使うと思われるので、分割の仕方・設計などはそれらのコードを直接読んでみると感覚がつかめると思われます。
特にPythonの場合コードが全て、人が読みやすいようになっているので、おすすめです。

import numpy as np
print(np.__file__)


のようにすれば、そのモジュールがどこに収められているのかを簡単に確認することができます。


プロセス間の通信を実装する方法はかなり多く、用途に応じて適切なものを選択する必要があります。
例に挙げられているような通信に最も近いのは、ファイル(ローカルだけ)もしくはSocket(ネット越しも)を中継に用いる連携でしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.26%

関連した質問

  • 解決済

    Node.jsのrequireの書き方について

    Node.jsを今勉強しているのですが どうしてもわかりません。 var io = require('socket.io')(80); var cfg = require('./

  • 受付中

    Node.js module.exportsと exportsの違いについて

    module.exportsと exportsの違いがわかりません!教えて下さい

  • 解決済

    namespaceによるリンケージについて

    無名名前空間に限らず、namespaceを使用すると内部リンケージになると考えて良いのでしょうか。 無名名前空間を使用すると内部リンケージになります。 そのため以下のコード

  • 解決済

    swift ソースファイルの分割

    前提・実現したいこと ソースファイルに書いてある内容が長くなってしまったのでソースファイルを新たに作成し、そこに機能や動作ごとにまとめたいのです。 発生している問題・エラー

  • 解決済

    Python C APIで実行時エラーがでる

    前提・実現したいこと Python C APIを使用して、Pythonで書かれたプログラムを実行するアプリケーションを作っています。 呼び出し側は、C++/CLI(Visual

  • 解決済

    monacaとonsenUIを使った時のJavascriptの記述方法

    monacaとonsenUIを使って勉強しつつハイブリッドアプリを作ってます。 初歩的な質問かと思いますが、Javascriptの記述方法についてわからない部分がありますので、

  • 解決済

    継承時のthisの働き

    こんにちは。現在Javaについて勉強しています。 今回はその継承に関して、調べてもよくわからない点があったので質問させてください。 見て頂きたいのは以下のコードです。 clas

  • 受付中

    VBA コンボボックスで選択したキーワードで検索したい。

    度々お世話になっております。 やっと目標に近づけてきたのですが、またも問題が発生しました。 【やりたいこと】 ・ユーザーフォームのコンボボックスでキーワードを選択。 ・その

同じタグがついた質問を見る

  • Python

    4192questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。