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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

4回答

227閲覧

html/css/JavaScript/ruby が各々単体では読める&書ける人間がアプリを作りたい

Sigma1630

総合スコア36

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2019/02/11 15:54

##やりたいこと
以下のようなアプリを作ろうと考えています。

![スクリーンキャプチャ
##機能
・value 1箇所と、unit 2箇所が記入されると、ブランクのvalue箇所(この場合は左下)に
自動的に非同期で正しい数値(この場合は0.2)が記述される。
・自動で埋められた箇所にはアニメーションをつけたい。(一瞬だけそのフォームの枠が赤くなるなど)
・Googleでええやんってなりそうですが、これの利点は単位の種類(面積、重さ、etc)を指定しなくても自動で単位を判断してくれるとこ、そうなる予定。

##教えて欲しいこと
html,cssはかけました。ここからどうすればよいのでしょう?大まじめです。

・どうやってこのinputに書いた数値、文字列を標準入力として渡すのか
・これらを標準入力として受け取るプログラムは何で書くのか?JavaScript?Ruby?
・SinatraとかRailsみたいなwebフレームワークを使ったほうがいいのか

Progateやドットインストールという教材で言語単体の読み方・書き方は分かり、AtCoderやPaizaで入力⇄出力間のアルゴリズムの組み方はわかりましたが、肝心のこれらをどう組み合わせればよいのか、というところが分かっていません。
これらの教材はhtmlとJavaScript,Rubyなどを組み合わせて使う手法に関しては教えてはくれませんでした。

まとめますと、多分私が知りたいのは
上の画像の状態から0.2というアウトプットが出るまでのプログラム間のフロー
になると思います。ひたすらに抽象的ですみません。
質問がこの体たらくなので回答内容の粒度は問いません。何か教えてくれればそれだけで嬉しいです。
もしくはこの本読んでおけば?みたいなものでも歓迎です。よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

何ができればそこまで到達できるか、細分化すれば道筋とそれに必要な技術(というと大げさですが、要は手法・機能)が見えてくるはずです。

特に単位に対してその上の単位、下の単位での計算方法は決まっているはずですから、それによって分岐できれば良いわけです。

JavaScriptだけで対応する場合は下記。

  1. 入力した情報(value1,unit1,unit2)を取得する
  2. 取得した情報で単位の判定を行う(単位比較から元の単位からの割合を決定)
  3. 元の単位からの割合に基づき、入力された数値を掛け算
  4. 掛け算した結果をvalue2に設定する

1.入力した情報を取得する

JavaScriptの場合、例えば「情報が変更された」「キーが押された(上がった)」ことによって発動できればいいわけですよね。となるとキーワードは「JavaScript input 変更時 イベント」「JavaScript input 入力時 イベント」などがキーワードになります。

2.取得した情報で単位の判定を行う

unit1とunit2の関係性が鍵になります。提示の画像ではkgに対してtなので分かりやすいですが「何が入力されるか分からない」という前提があります。
ここからは発想ですが、何かしらで、1○○という単位を情報として持っておけば、そこから計算することにより入力された数値からどれくらいの数を掛ければ良いのかが決まります。
基準を適当にもっておいて。連想配列とかがいいでしょうね。

js

1//今回は重さのみ。単位の種類を増やすならもう1階層あった方が良い。 2let basic_setting = {'mg':0.001,'g':1,'kg':1000,'t':1000000};

unit1がkgでunit2がtなので、その2つのキーにより1000と1000000が取得できる。
あとはこの2つで割り算をすればvalue1からの割合が決まる

3.元の単位からの割合に基づき、入力された数値を掛け算

value1が取得できていて、元の単位からの割合が分かっているので、そちらを掛け算すれば結果が分かる。
四則演算の範囲です。

4.掛け算した結果をvalue2に設定する

「取得」の逆となります。「JavaScript input 初期値 設定」がキーワードになります。

蛇足:
Rubyなどサーバー側の言語を利用する場合は「リクエスト」と「レスポンス」について理解をする必要がありますが、
ひとまず「入力フォームを送信」することで入力した情報がサーバー側の言語で受け取れるようになるのでその観点で対応していってはどうでしょうか。
処理の流れ的には同じです。取得して、計算して、設定する。

投稿2019/02/12 02:09

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sigma1630

2019/02/12 03:56

こう調べればいいんじゃないか、というところまで教えていただきありがとうございます!クライアント側のコード記述だけでもアプリは作れること理解しました
m.ts10806

2019/02/12 04:07

基本、何事も細分化です。細かければ細かいほど何が必要か、何を調べれば良いかがハッキリしてきます。
guest

0

どうやってこのinputに書いた数値、文字列を標準入力として渡すのか

標準入力はコマンドラインプログラムで使うものなので、Webアプリケーションで出番はありません。

これらを標準入力として受け取るプログラムは何で書くのか?JavaScript?Ruby?

「計算して表示するだけ」のような機能性の場合、ブラウザ内のJavaScriptだけで完結させるのがいちばんシンプルです(通信をするようにも書けますが、手間なだけで特にメリットはないです)。

SinatraとかRailsみたいなwebフレームワークを使ったほうがいいのか

上述のように、JavaScriptだけで完結させられますので、これらのフレームワークは大げさなだけです。JavaScript側でVue、React、Riotなど何かしらのフレームワークを使うのは便利かもしれません(この程度ならDOMを直接叩く、あるいはjQueryでもそこまで困らずにできるかとは思いますが)。

投稿2019/02/12 00:08

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sigma1630

2019/02/12 03:49

色々と用語の使い方に関しても教えて頂きありがとうございます!
guest

0

javascript

1<!DOCTYPE html> 2<title></title> 3<meta charset="utf-8"> 4<style> 5</style> 6 7<body> 8<form> 9 <p> 10 <input type="text" name="n0" value=""> 11 <input type="text" name="u0" value=""> 12 <p> 13 <input type="text" name="n1" value=""> 14 <input type="text" name="u1" value=""> 15</form> 16 17<script> 18 19 class DelayWork { 20 constructor (callBackFunc, wait = 500) { 21 this.callBackFunc = callBackFunc; // func.bind (this) 22 this.wait = wait; 23 this.timerID = null; 24 } 25 26 start (...arg) { 27 if (! this.timerID) { 28 let cbfunc = () => { 29 this.timerID = null; 30 this.callBackFunc (...arg); 31 }; 32 this.timerID = setTimeout (cbfunc, this.wait); 33 } 34 return this; 35 } 36 37 38 stop () { 39 if (this.timerID) 40 clearTimeout (this.timerID); 41 this.timerID = null; 42 return this; 43 } 44 } 45 46 //_____________________________________________________ 47 48 49 class DelayHandler { 50 51 constructor (handler, wait = 500) { 52 let cbFunc; 53 switch (Object.prototype.toString.call (handler)) { 54 case '[object Object]' : 55 if ('handleEvent' in handler) 56 if ('function' === typeof handler.handleEvent) 57 cbFunc = handler.handleEvent.bind (handler); 58 break; 59 60 case '[object Function]' : 61 cbFunc = handler; break; 62 63 default: 64 throw new Error ('Not handleEvent'); break; 65 } 66 67 this.handler = new DelayWork (cbFunc, this.wait); 68 this.wait = wait; 69 } 70 71 72 handleEvent (event) { 73 this.handler.stop ().start (event); 74 } 75 } 76 77 78//_____________________________________________________ 79 80const 81 form = document.querySelector ('form'), 82 targets = [...form.querySelectorAll ('input[name^=n], input[name^=u]')]; 83 84 85function ai (event, kara) { 86 console.log (kara.name); 87 targets.forEach (e => console.log (e.name, e.value)); 88 89 /*.... 90 91 92 93 */ 94 95 kara.value = '?'; 96 kara.style.cssText = 'border: red 2px solid'; 97 (new DelayWork (() => kara.style.cssText = '', 1000)).start (); 98} 99 100 101function handler (event) { 102 let n = targets.filter (e => ! e.value.length); 103 if (1 === n.length) 104 if (event.target !== n[0]) 105 ai (event, n[0]); 106} 107 108 109form.addEventListener ('input', new DelayHandler (handler), false); 110 111 112</script>

投稿2019/02/11 19:31

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sigma1630

2019/02/12 03:50

具体的なコードありがとうございます!
guest

0

javascript

1<!DOCTYPE html> 2<title></title> 3<meta charset="utf-8"> 4<style> 5</style> 6 7<body> 8<form> 9 <p> 10 <input type="text" name="n0" value=""> 11 <input type="text" name="u0" value=""> 12 <p> 13 <input type="text" name="n1" value=""> 14 <input type="text" name="u1" value=""> 15</form> 16 17<script> 18 19const 20 form = document.querySelector ('form'), 21 targets = [...form.querySelectorAll ('input[name^=n], input[name^=u]')]; 22 23 24function ai (event, kara) { 25 console.log (kara.name); 26 targets.forEach (e => console.log (e.name, e.value)); 27 28 /*.... 29 30 31 32 */ 33 34 kara.value = '?'; 35 kara.style.cssText = 'border: red 2px solid'; 36} 37 38 39function handler (event) { 40 let n = targets.filter (e => ! e.value.length); 41 if (1 === n.length) 42 if (event.target !== n[0]) 43 ai (event, n[0]); 44} 45 46 47form.addEventListener ('input', handler, false); 48 49 50</script>

投稿2019/02/11 17:48

編集2019/02/11 19:18
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問