未経験からウェブカツ!!"returnの使い方”プログラミング学習レポ
スポンサーリンク

ウェブカツ!!女性割引を適応し、プログラミング学習をしています。
ウェブカツを受講し始め、3ヶ月が経とうとしています。前回からの経過報告をしたいと思います。

日々のプログラミング学習過程をtwitterで報告しています。ペースは早くないけど日々頑張っているので、いいね・フォローしてもらえると嬉しいです。

初回の記事やプロフィールにも書きましたが、プログラミングは全くの未経験者です。
ある程度早急に、そして確実に仕事にできる、かつ、フリーランスとして働ける技術を身につけたくて探していたところプログラミングに辿り着きました。

前回の進捗報告はこちら

10月から契約社員になります!!

いきなり、私ごとで恐縮ですが、10月から正社員から契約社員に変更申請が受理されました。
もとは、プログラミングをしっかり勉強したいため、退職を申し出たのですが。

職場も人員不足な状態で、
と言ってもかなりホワイトな会社です。

周囲からの説得の元、留まることにしました。
ま、現職も大好きなので、これはこれで続けていけるのは幸いです。

10月からは午前勤務、在宅ワークも少し取り入れて行きます。
全ての時間をプログラミング学習に使えるわけではないのですが、かなり自由度が上がります!!

連続学習時間による理解度の違い

プログラミングを勉強して稼げるようになりたい!と思ったら、やはりまとまった時間が必要です。
今まで、フルタイム勤務で、家に帰ったら家事に育児、ワンオペ育児に近い状態で、休みの日も私主体で子守。

余裕のあるときは、子供を夫が見てくれますが、
それをアテにしてしまうと、見てもらえない時辛くなるので基本的には任せきりにはしません。

となると自分の時間なんて取れません。
毎日家事の時間、睡眠時間を削り、コツコツ細切れで勉強してきました。

が、今回、有休消化のため10日ほど休みをもらい、
子供のいない昼間に5時間も勉強してみて分かりました。

細切れで学習するのとある程度時間をかけて理解するのでは全然理解度が違いました。

少しずつでも進歩している!と信じていました。
もちろんそれは本当だし、そんな状況でプログラミングの学習を続けておられる方も多いと思います。

でも。。
こんなに違うのかと驚きました。

連続学習時間が必要なワケ

細切れでは理解しきれない、吸収できないうちに終わってしまいます。

私のプログラミング経験の浅さと理解度が低いため、ということは言うまでもないのですが。。

プログラミングって「暗記」とか、「公式覚えたら使える」とかいうものではありませんね。
インプットはもちろん大事。
プログラミングの基礎をちゃんと理解していないと進まない。

でもそれ以上にアウトプットして、実際使ってみて、自分にものに落とし込むことが大切ですよね。

実際に使ってみたら、使い方は合っているのにうまくいかないことだらけ。
そんなエラーと向き合って行くには短時間では足りないのです。

時間をかけられれば、深く考える余裕が出来ます。

色んな方法を考え、試行錯誤する時間が出来ました。
そうすれば自分のものに吸収できるし、落ち着いて学習に向かえました。

仕事と両立して学習すること

皆さん、仕事との両立してプログラミングの学習を続けていくことを悩まれている方もいると思います。
もちろん、私なんかより理解度も早く、仕事と両立できるからしている方もいるでしょう。
でも、辞めたくても辞められない状況で頑張っている方も多いと思います。

私は、有り難いことに、どちらか、どちらも、を選択できる状況でした。

選択できない状況の方がこの記事を読まれるかも。
書くのをためらいましたが、

この勉強時間の違いを体感して、やはりこれは重要なポイントだと思います。

成功させるからには、それだけの時間をかけることが必要。

成功している人は、
今、現役でプログラマーの方は。

それだけコードを書いている。

同じフィールドに立とうと思うなら。
私もそれと同じかそれ以上に、コードを書いて練習しなければいけない。
そのために仕事のウェイトを減らすことにしました。

その分、期限を決めて、必死で頑張ります。
ブランクのできる数年は、その後何かしら成果を出せれば挽回できるはず…!

と、張り上げたところで、自分がこれからどれだけ伸びるか不安ですが。。

しかしもう後戻りは出来ないので、これしかない。
これをやり切るしかない!!

スポンサーリンク

学習状況

学習進捗報告
ウェブカツ!!学習:92日経過
学習時間:146h
学習内容:webサービス部lesson19まで

HTML・CSSの復習

有給中に、しっかり時間をかけてhtml.css復習をしました。
サイト模写がようやく形にできるようになって来ました。

私の場合、分からないとか以前に…

cssが効かない。

もう初歩過ぎて何も言えません。。

おさらいとして、
初心者がやりがちな勘違いあるあるを書きます。
全く未経験から始めた方で、cssが反映されなくて悩んでいる方の参考にはなるかな?

1htmlファイルに読み込んでいるcssファイルが間違っている

  1. cssファイルのディレクトリ違い
  2. 同じ階層と思って書いていて、実はcssディレクトリを別に準備していたなど、ごっちゃになっているのはよくある話。

  3. cssファイルの名前違い
  4. 写経したり模写したり、自分でいくつもファイルを作っていると、反映したいcssファイルと思い込んで他のcssファイルを読み込んでいたりします。

2htmlとcssでのクラス名の間違い

これも結局、1と同様のミスなのですが。

クラス名の命名は、適当でいいわけではありません。
後から見直しても、第三者が見ても、分かりやすい名前でなければいけません。

また、1つの要素に対して、いくつもクラス名がつくことがあります。
出来るだけ簡潔で、規則性のあるものが良いと思われます。

CSS設計のお話はまだ学習していないので、

今の段階でわかる、CSS名の守るべきルール

  • クラス名の命名は、原則英語で、その要素の用途がよく分かる、意味のある名前をつける。
  • 要素に対してCSSを書かない。
  • 共通で効かせたくない箇所がある場合、それを打ち消すコードを上書きする必要が出てくる。
    コード量も多く、複雑になるため、要素名に対して直接cssを書くのはNG。

  • htmlに依存した書き方はしない。
  • htmlに依存とは、h2>pの言う風に、変わる可能性のある要素に付随したもの。
    htmlが後々修正されたら、cssもまた変更が必要になる。

もちろん不必要なクラスまでつける必要はないですが、はじめのうちは丁寧にクラスをつけつつ、重複するところが出て来たら切り出してまとめる、と言う作業をしていけば複雑になるのを防げると思います。

参考記事

こちらは”良いコードを書く技術”という本の感想と筆者の体験から初心者のわかる優しい範囲でのコードの書き方について、まとめられた内容です。
難しいことが分からなくても最低限意識しないといけないことが書かれています。

webサービス部の進行状況

こちらは本当にゆっくりですが、進めています。
1周目、全てを理解しきれないのは分かっていますが、最低限、皆さんの質問を理解してから進めてるようにしています。

2今回の学習内容

毎回一つ、学習内容から学んだことを書いています。
あまり進展がないので書けないのですが、先日の学習で何とか納得出来たこと。

webサービス部lesson16の内容です。

注意
※学習途中の身なので、理解しきれていません。自分のためにわかったことまでをまとめました。
参考にされる方は全てを信用せずにお願いします。
考え方に間違いがありましたら、ご指摘願います。ご指導もありがたくお受けいたします…!!※
sussion_unset()とreturn関数について
session unset();

session_unsetは$ _SESSION変数をクリアするだけ。

$_SESSION = array();

とほぼ同じ。
ローカル$ _SESSION変数インスタンスにのみ影響。
セッション記憶域のセッションデータには影響しない。
→$ _SESSION変数でsession_unset()またはunset()を呼び出すと、現在のセッションに登録されているすべての変数が消去されるが、セッション自体は消去されない
すべてのセッションデータを削除してしまうので、セッションデータの一部を削除したい時には使えない。
$_SESSION = array();は一部の削除が可能。

session_destroy;

セッション記憶装置に格納されたセッションデータ(例えば、ファイルシステム内のセッションファイル)を破壊する。

セッション変数自体を破棄する場合;session_unset()
それに加えてサーバ上に用意したセッション変数保存用領域も破棄したい場合;
session_unset() と合わせて session_destroy() を呼び出す。

unset($_SESSION);

とした場合は、$_SESSION というスーパーグローバル変数自体が破棄されてしまうため、そのプログラムが実行されている間は $_SESSION にアクセスできなくなってしまう。

注意:

$_SESSION が使用されている場合、セッション変数の登録を削除するために unset() すなわち、unset ($_SESSION['varname']); を使用してください。
警告:
$_SESSION スーパーグローバルを使用した セッション変数の登録が不可能になってしまうため、 unset($_SESSION) を使って $_SESSION を完全に unset しないでください。

理解が追いついていませんので、間違いもあると思いますが、自分の理解したことを書いておきます。

認証キー生成画面からログイン画面に遷移した時の処理
作用していることで悩んだのは2点

  • ログイン画面に遷移した時、ログインページのdebugLogStart内のデバッグにsession情報とmsg_successが表示されない
  • login.phpに遷移した時にjs-show-msgが発火しない
  • session_unset;

    セッション変数の登録が破棄され、ログインページのdebugLogStart内のデバッグには何も表示されない
    →ソースコードからsession_unset()を削除すると
    ログインページのdebugLogStart内のデバッグにてsession情報が表示される
    作用するのはsession変数の値のみ。

    login.phpに遷移した時にjs-show-msgが発火しない状態;
    ログインページのdebugLogStart内のデバッグにてmsg_successが表示されていない
    →header関数にreturn;を入れる

    //sessionを一回だけ取得できるgetSessionFlash関数を定義

    function getSessionFlash($key){
        if(!empty($_SESSION[$key])){
            $data = $_SESSION[$key];
            $_SESSION[$key]='';
            return $data;
        }

    getSessionFlash関数にて、msg_successが削除される。

    return;

    処理を途中で強制的に終わらせる(=その時点でレスポンスを返す)
    関数内でreturn;をした場合は関数が終了して、関数を呼び出した元の処理に戻る

    という処理をする。
    ここのreturnの処理の理解に苦しみました。

    getSessionFlash関数→passRemindRecieve.phpに遷移。
    は分かる。呼び出して、処理をして元へ返す。

    問題はheader関数。
    これはログイン画面に遷移する処理なのに、どうして?どこにreturnするの??ってなってしまっていたのですが、

    Header関数→ログイン画面に遷移してしまったからpassRemindRecieve.phpに返さないと後の処理(すなわちjs-show-msg発火の処理)が読まれない…!
    という理解でいいのかな。

    サーバーがレスポンスを返すのは最終的にページ内の処理が全て終わった時

    getSessionFlash関数にて、msg_successが削除される。
    →returnしないと処理を実行していても、値が返されないまま。結果、何も行われていないようになる?

    header関数は、直前にsession_unsetにてsessionを削除して再度msg_successに値を詰めた地点。
    ここでreturnしないとログイン画面での処理が実行されない。

    今の段階での認識です。

    次に試したこと。
    getSessionFlash関数、header関数にreturn;を入れなかった場合の動作を検証

    以上よりわかったこと。

    • session_unset()はsession情報の削除のみ作用する。
    • header関数のreturn;の有無によってmsg_success値、すなわちメッセージ発火が作動する。
    • getSessionFlash関数はsessionを一度だけ取得できる関数。
    • session_unset()することでsession情報が削除されるので前のページに戻れなくなる。

    今回の場合、getSessionFlash関数がreturnしなくてもheader関数の実行される直前でmsg_successに値が詰められているのでメッセージ発火が実行される。発火の有無はgetSessionFlash関数でなく、header関数の有無による。

    session_unsetが実行されていなければセッション情報は保持しているので、何度でも同じ処理をすることが可能になる。

    そうなると、getSessionFlash関数の意味がなくなっている…?とまたドツボにハマっていましたが、

    passRemindSend.phpからpassRemindRecieved.phpに遷移する際はgetSessionFlash関数のreturnの有無だけでメッセージの削除が実行されている。
    passRemindRecieved.phpからlogin.phpに遷移する際にsession_unset()、header関数のreturn;が無い状態と同じ状況なのでは。。

    getSessionFlash関数はfunction.phpに書かれており、passRemindSend.phpでは呼び出されておらず。
    passRemindSend.phpからpassRemindRecieved.phpに遷移する際にもpassRemindRecieved.phpのhtmlタグ内のを使って呼びだされている。だからこの時は遷移する際にreturnが必要ない。
    そして確かに、msgは一回出るとその後前ページに戻り、処理を繰り返しても同じ動作にはなりません。(msg発火せず)

    この場合、本来のgetSessionFlash関数の役割、すなわち「セッションを一度取得して削除する」を実行している、とういうシンプルな処理をしているのかな、と。

    passRemindRecieved.phpからlogin.phpに遷移する場合は他の処理も絡んでおり、getSessionFlash関数の役割が理解しづらくなっていました。

    これで合っているのか分かりませんが。。
    いくつもの動作の理解がごちゃ混ぜになっていたので、一つ一つ検証することで何がどこに作用するのかようやく少しわかったような気がします。

    とういうところで今月の学習終了。

    何度も同じようなことを書いてしまいましたが、言いたいことは

    returnがあってはじめて関数を呼び出した場所に変化がある

    結構時間をかけてしまいましたが、私にはまだまだプログラミング脳が発達していません。
    プログラミングを考える上で、問題が起こった時、何を検証すればいいか考える力が必要です。
    今回悩んだ時間が正しかったのか分かりません。
    が、こういった経験を積んで正しい動作確認ができるようになれば、、と思い、不完全、未熟なものですが記録に残します。

    まとめ

    本当に、超初心者すぎて、悩んでいること、やっていることのレベルが低すぎますが。。
    内容もより高度なものになり。

    3ヶ月経ってしまい、いよいよ本格的にアウトプットもことを考えないと、と危機感を感じています。
    この先不安も多いですが、振り落とされないようしっかりしがみつき、もがきながらも日々邁進していきます。

    最近のコメント

      Twitterでフォローしよう

      おすすめの記事