273 lines
19 KiB
HTML
273 lines
19 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>プチレッスン『タイプライターっぽいもの』その1 | おこげ俱楽部</title>
|
||
<meta name="title" content="プチレッスン『タイプライターっぽいもの』その1 | おこげ俱楽部">
|
||
<meta name="description" content="サンプルプログラム「タイプライターもどき」をもうちょっとだけタイプライターっぽくしてみましょう。">
|
||
<meta name="keywords" content="オコゲ,プチレッスン,タマちー&ミミィ,オコゲ,blockly,プログラミング,上野学習塾">
|
||
<meta name="author" content="ocogeclub">
|
||
<meta name="robots" content="index, follow">
|
||
<link rel="canonical" href="https://ocoge.club/2022-05-14_petitlesson-01_typewriter-1/">
|
||
<link rel="shortcut icon" type="image/png" href="/assets/img/favicon.png">
|
||
<link rel="apple-touch-icon" href="/assets/img/apple-touch-icon.png">
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@500&display=swap" rel="stylesheet">
|
||
<link href="https://fonts.googleapis.com/css2?family=Kosugi+Maru&display=swap" rel="stylesheet">
|
||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap">
|
||
<script src="https://kit.fontawesome.com/73f7be0650.js" crossorigin="anonymous"></script>
|
||
<link rel="stylesheet" href="/assets/floatbox/floatbox.css" />
|
||
<script src="/assets/floatbox/floatbox.js" defer></script>
|
||
<link rel="stylesheet" href="/assets/css/ocmain.css">
|
||
<link rel="stylesheet" href="/assets/css/main.css">
|
||
<link rel="stylesheet" href="/assets/css/footer.css">
|
||
<link rel="stylesheet" href="/assets/css/post.css">
|
||
<meta property="og:image" content="https://ocoge.club/assets/img/ogp_typewriter.webp">
|
||
<meta property="og:title" content="プチレッスン『タイプライターっぽいもの』その1 | おこげ俱楽部">
|
||
<meta property="og:description" content="サンプルプログラム「タイプライターもどき」をもうちょっとだけタイプライターっぽくしてみましょう。">
|
||
<meta property="og:url" content="https://ocoge.club/2022-05-14_petitlesson-01_typewriter-1/">
|
||
<meta property="og:site_name" content="おこげ俱楽部">
|
||
<meta name="twitter:card" content="summary">
|
||
<meta name="twitter:site" content="@ocogeclub">
|
||
</head>
|
||
|
||
<body class="flex flex-col h-screen bg-white text-gray-800 break-words">
|
||
<header id="header" class="header-shadow bg-white px-6 py-5 z-50 fixed w-full top-0 transition-all transform ease-in-out duration-500">
|
||
<div class="max-w-5xl mx-auto flex items-center flex-wrap justify-between">
|
||
<div class="sm:mr-8">
|
||
<a class="flex items-center" href="/">
|
||
<span class="text-xl text-teal-700 font-semibold self-center"><img src="/assets/img/ocoge_title_kogecha.webp" title="おこげ俱楽部" alt="おこげ俱楽部" id="site_title"></span>
|
||
</a>
|
||
</div>
|
||
<nav id="menu" class="order-last md:order-none items-center flex-grow w-full md:w-auto md:flex hidden mt-2 md:mt-0">
|
||
|
||
<a href="/about" class="block mt-4 md:inline-block md:mt-0 font-medium text-gray-700 hover:text-teal-600 text-base mr-4">About</a>
|
||
|
||
<a href="/tags" class="block mt-4 md:inline-block md:mt-0 font-medium text-gray-700 hover:text-teal-600 text-base mr-4">Tag List</a>
|
||
|
||
<a href="https://cloud.ocoge.club/" target="_blank" rel="noopener" class="block mt-4 md:inline-block md:mt-0 font-medium text-gray-700 hover:text-teal-600 text-base mr-4">Cloud/Mail</a>
|
||
|
||
<a href="https://git.ocoge.club/ocogeclub/pages" target="_blank" rel="noopener" class="block mt-4 md:inline-block md:mt-0 font-medium text-gray-700 hover:text-teal-600 text-base mr-4">ocogIt</a>
|
||
|
||
</nav>
|
||
<form id="search" action="/search" class="order-last sm:order-none flex-grow items-center justify-end hidden sm:block mt-6 sm:mt-0">
|
||
<label class="visually-hidden" for="header-searchbox">記事タイトル/概要を検索 ...</label>
|
||
<input type="text" id="header-searchbox" name="q" placeholder="記事タイトル/概要を検索 ..." class="w-full sm:max-w-xs bg-gray-200 border border-transparent float-right focus:bg-white focus:border-gray-300 focus:outline-none h-8 p-4 placeholder-gray-500 rounded text-gray-700 text-sm">
|
||
</form>
|
||
<div id="menu-toggle" class="flex items-center md:hidden text-gray-700 hover:text-teal-600 cursor-pointer sm:ml-6">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
|
||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||
</svg>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
<main class="mx-7 lg:mx-6 mt-32 flex-grow">
|
||
|
||
|
||
<article class="max-w-5xl mx-auto">
|
||
<header class="mb-14">
|
||
<h1 class="text-3xl text-center font-bold leading-normal text-gray-900 mt-0 mb-3">プチレッスン『タイプライターっぽいもの』その1</h1>
|
||
<div class="text-center"><i class="fa-regular fa-clock"></i> 2022年5月15日</div>
|
||
|
||
<div class="mt-3 text-center">
|
||
|
||
<a href="/tags/オコゲ" class="inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-medium text-gray-700 m-0.5">#オコゲ</a>
|
||
|
||
<a href="/tags/プチレッスン" class="inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-medium text-gray-700 m-0.5">#プチレッスン</a>
|
||
|
||
<a href="/tags/タマちー&ミミィ" class="inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-medium text-gray-700 m-0.5">#タマちー&ミミィ</a>
|
||
|
||
</div>
|
||
|
||
|
||
<div class="mt-10 -mx-7 md:mx-0">
|
||
<img class="w-full max-w-2xl mx-auto" src="/assets/img/ogp_typewriter.webp" alt="This post thumbnail">
|
||
</div>
|
||
|
||
</header>
|
||
<div id="content" class="prose text-gray-800 max-w-none">
|
||
<div class="balloon_right">
|
||
<div class="faceicon_right">
|
||
<img src="/assets/img/mimmy.webp">
|
||
<p>ミミィ</p>
|
||
</div><div class="chatting">
|
||
<div class="says_right"><p>
|
||
『オコゲ』Web体験版サンプルプログラムの「タイプライターもどき」をもうちょっとだけタイプライターっぽくしてみるわ!
|
||
準備はいいかしら!?
|
||
</p></div>
|
||
</div>
|
||
</div>
|
||
<div class="balloon">
|
||
<div class="faceicon">
|
||
<img src="/assets/img/tama.webp">
|
||
<p>タマちー</p>
|
||
</div><div class="chatting">
|
||
<div class="says">
|
||
ん…元記事はこれ、です…
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="card"><article class="blogcard"><h4 class="blogcard__heading"><a class="blogcard__link" href="/2022-05-07_demo/">『オコゲ』Web 体験版 | おこげ俱楽部</a></h4><img loading="lazy" class="blogcard__image" src="/assets/img/raspberrycake_ogp.webp"><p class="blogcard__description">ブロックプログラミングを体験してみましょう。ハードウェアなどの制限から、Web体験版ではできないこともありますが、感触を確かめることはできます。</p><div class="blogcard__meta"><img loading="lazy" class="blogcard__logo" src="/assets/img/favicon.png"><span class="blogcard__publisher">おこげ俱楽部</span></div></article></div>
|
||
<p>まず最初に、どこをどのように変更するか決めておきます。</p>
|
||
<figure style="max-width: 400px; margin: 0 auto;"><div class="floatbox"
|
||
data-fb-options="colorTheme:silver" style="width: 100%;">
|
||
<a href="/assets/img/typewriter.webp" title=""><img loading="lazy" src="/assets/img/typewriter.webp" style="width: 100%;"></a></div>
|
||
<figcaption>
|
||
<i class="fa-solid fa-magnifying-glass"></i> クリックで拡大
|
||
</figcaption>
|
||
</figure>
|
||
<p>サンプルプログラムの記事にあるブロックはこれです。実行してみるとわかりますが、このプログラムでは、キーボードの入力が1行に1文字ずつ表示されます。<br>
|
||
以下の記事では、このプログラムを1行に文字を横並びに行として表示、改行とついでにバックスペースで文字を削除できるように改造することにしましょう。</p>
|
||
<p>このプログラムは永久にキーボードからの入力待ちをします。実行後は次のステップに行く前に <span style="color: #00bfff" class="text-color"><i class="fas fa-redo-alt"></i></span> をクリックしてページをリロードしておきましょう。</p>
|
||
<h2>キー入力を変数に記憶させて表示する</h2>
|
||
<p>『オコゲ』の黒板表示は1行ずつ表示することしかできません。そこで、キーボードから入力された文字を変数に代入して記憶してから、まとめて表示できるようにしましょう。</p>
|
||
<p>変数とは、数字や文字を代入して保存しておくことができる領域のことです。変数には名前をつけて使います。「変数1」という名前の変数に「あいう」を記憶させてから、『「変数1」を表示しなさい』と命令すれば「あいう」が表示されます。変数の中身は必要に応じて何度でも書き換えることができます。</p>
|
||
<h3>変数を作成する</h3>
|
||
<figure style="max-width: 200px; margin: 0 auto;"><div class="floatbox"
|
||
data-fb-options="colorTheme:silver" style="width: 100%;">
|
||
<a href="/assets/img/make_var.webp" title=""><img loading="lazy" src="/assets/img/make_var.webp" style="width: 100%;"></a></div>
|
||
<figcaption>
|
||
<i class="fa-solid fa-magnifying-glass"></i> クリックで拡大
|
||
</figcaption>
|
||
</figure>
|
||
<p>まず、入力を記録する変数を作成します。「変数」カテゴリから「変数の作成…」をクリックします。</p>
|
||
<figure style="max-width: 460px; margin: 0 auto;"><div class="floatbox"
|
||
data-fb-options="colorTheme:silver" style="width: 100%;">
|
||
<a href="/assets/img/input_var_name.webp" title=""><img loading="lazy" src="/assets/img/input_var_name.webp" style="width: 100%;"></a></div>
|
||
<figcaption>
|
||
<i class="fa-solid fa-magnifying-glass"></i> クリックで拡大
|
||
</figcaption>
|
||
</figure>
|
||
<p>ダイアログで変数の名前を入力します。ここでは「行」にします。</p>
|
||
<h3>キー入力を変数に代入する</h3>
|
||
<p>この状態で「変数」カテゴリを開くと、<img loading="lazy" class="inline" src="/assets/img/ptlesson_01-04.webp" style="height: 32px"> がありますので、これと <img loading="lazy" class="inline" src="/assets/img/ptlesson_01-05.webp" style="height: 28px"> を使って、変数「行」に変数「キー」の内容を代入するコードを作ります。黒板には「キー」ではなく「行」を表示するように変更します。</p>
|
||
<figure style="max-width: 400px; margin: 0 auto;"><div class="floatbox"
|
||
data-fb-options="colorTheme:silver" style="width: 100%;">
|
||
<a href="/assets/img/ptlesson_01-03.webp" title=""><img loading="lazy" src="/assets/img/ptlesson_01-03.webp" style="width: 100%;"></a></div>
|
||
<figcaption>
|
||
<i class="fa-solid fa-magnifying-glass"></i> クリックで拡大
|
||
</figcaption>
|
||
</figure>
|
||
<p>これを実行しても、結果は変更前とまだ変わりありません。これは、変数「行」が1回分の「キー」しか覚えていないからです。では、変数「行」にキー入力を続けて記憶させるにはどのようにすれば良いのでしょうか。</p>
|
||
<h3>変数に文字を追加して文字列を作成しよう</h3>
|
||
<p>文字列とは、文字の並びや集まりのことです。文字列も変数に記憶させておくことができます。では変数「行」の後ろに「キー」を追加するコードを考えてみましょう。例えば、最初「行」が “a" で「キー」が “b" だったら、最後に「行」が “ab" になるような、そんなプログラムを作りましょう。</p>
|
||
<div class="balloon_right">
|
||
<div class="faceicon_right">
|
||
<img src="/assets/img/mimmy.webp">
|
||
<p></p>
|
||
</div><div class="chatting">
|
||
<div class="says_right"><p>
|
||
さ、初めての出題ね!すぐに答えを開かないで、自分で考えて実際にブロックを組んで実行してみるのヨ!
|
||
</p></div>
|
||
</div>
|
||
</div>
|
||
<div class="balloon">
|
||
<div class="faceicon">
|
||
<img src="/assets/img/tama.webp">
|
||
<p></p>
|
||
</div><div class="chatting">
|
||
<div class="says">
|
||
ヒントは見てもいいの...
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p><span style="color: #ff0000" class="text-color"><i class="fas fa-hand-point-right">
|
||
</i></span> ヒント:
|
||
<img loading="lazy" class="inline" src="/assets/img/ptlesson_01-04.webp" style="height: 32px">
|
||
<img loading="lazy" class="inline" src="/assets/img/ptlesson_01-05.webp" style="height: 28px">
|
||
<img loading="lazy" class="inline" src="/assets/img/ptlesson_01-06.webp" style="height: 28px">
|
||
<img loading="lazy" class="inline" src="/assets/img/ptlesson_01-07.webp" style="height: 28px">
|
||
を使います。</p>
|
||
<details class="lesson">
|
||
<summary class="lesson"> <i class="fa-solid fa-pen-to-square"></i> レッスン:変数「行」に「キー」を追加しよう</summary>
|
||
<div class="lesson"><div class="slide">
|
||
<figure style="max-width: 286px; margin: 0 auto;"><div class="floatbox"
|
||
data-fb-options="colorTheme:silver" style="width: 100%;">
|
||
<a href="/assets/img/ptlesson_01-08.webp" title=""><img loading="lazy" src="/assets/img/ptlesson_01-08.webp" style="width: 100%;"></a></div>
|
||
<figcaption>
|
||
<i class="fa-solid fa-magnifying-glass"></i> クリックで拡大
|
||
</figcaption>
|
||
</figure>
|
||
<p>「追加する」という機能がないプログラミング言語を使う場合はこのような書き方をすることが多いです。分かりにくく感じる方は、式で考えるとすっきりするかもしれません。
|
||
「行」=「行」+「キー」
|
||
「行」と「キー」を連結して、その結果をまた「行」に戻す(代入する)というわけです。
|
||
これで、変数「行」の中身をリセットしない限りはキー入力を「行」にためこんでおくことができるようになりました。このブロックは、次のように配置してください。</p>
|
||
<figure style="max-width: 341px; margin: 0 auto;"><div class="floatbox"
|
||
data-fb-options="colorTheme:silver" style="width: 100%;">
|
||
<a href="/assets/img/ptlesson_01-09.webp" title=""><img loading="lazy" src="/assets/img/ptlesson_01-09.webp" style="width: 100%;"></a></div>
|
||
<figcaption>
|
||
<i class="fa-solid fa-magnifying-glass"></i> クリックで拡大
|
||
</figcaption>
|
||
</figure>
|
||
</div></div>
|
||
</details>
|
||
<p>これを実行してスペースキーを押してみてください。<img loading="lazy" class="inline" src="/assets/img/petitlesson_01-10.webp" style="height: 32px"> と表示されたでしょうか。"undefined" は「未定義」という意味で、ここでは「行」という変数が未定義ですよ、ということになります。
|
||
何が起きているかというと、プログラム実行後最初にキーボードを押したとき、プログラムはまず「行」と「キー」を連結しようとします。ところが、これより前にプログラムは「行」に対して何もしていません。つまり、このときプログラム的には「行」という入れ物はあっても、何が入っているのか分かっていない状態なのです。だからプログラムは「『行』?わからんなー」と答えているのです。これを避けるためには、次のように、最初に変数「行」は空っぽの文字列だよー、と決めてあげる必要があります。</p>
|
||
<figure style="max-width: 320px; margin: 0 auto;"><div class="floatbox"
|
||
data-fb-options="colorTheme:silver" style="width: 100%;">
|
||
<a href="/assets/img/petitlesson_01-11.webp" title=""><img loading="lazy" src="/assets/img/petitlesson_01-11.webp" style="width: 100%;"></a></div>
|
||
<figcaption>
|
||
<i class="fa-solid fa-magnifying-glass"></i> クリックで拡大
|
||
</figcaption>
|
||
</figure>
|
||
<p>繰り返し処理の中で変数を使う場合、この「変数の初期化」をしないとちゃんと動かないことがよくあります。
|
||
<span class="tsubuyaki">
|
||
昔 C 言語で変数を宣言しただけだと中にゴミデータが入ったままで…いや、なんでもない
|
||
</span><br>
|
||
頭の片隅にでも入れておくといいかもしれません。</p>
|
||
<p>では、実行してキーボードから「abcdefg」と入力してみましょう。</p>
|
||
<figure style="max-width: 88px; margin: 0 auto;"><div class="floatbox"
|
||
data-fb-options="colorTheme:silver" style="width: 100%;">
|
||
<a href="/assets/img/petitlesson_01-12.webp" title=""><img loading="lazy" src="/assets/img/petitlesson_01-12.webp" style="width: 100%;"></a></div>
|
||
<figcaption>
|
||
</figcaption>
|
||
</figure>
|
||
<p>しっかり変数にキー入力が蓄積されて行っているようですね!でもこれだとタイプライターとは言い難い挙動なので、1か所修正します。</p>
|
||
<figure style="max-width: 350px; margin: 0 auto;"><div class="floatbox"
|
||
data-fb-options="colorTheme:silver" style="width: 100%;">
|
||
<a href="/assets/img/petitlesson_01-13.webp" title=""><img loading="lazy" src="/assets/img/petitlesson_01-13.webp" style="width: 100%;"></a></div>
|
||
<figcaption>
|
||
<i class="fa-solid fa-magnifying-glass"></i> クリックで拡大
|
||
</figcaption>
|
||
</figure>
|
||
<p>それっぽくなってきましたね?</p>
|
||
<p>その2に続きます。
|
||
(準備中)</p>
|
||
|
||
</div>
|
||
|
||
<div class="mt-10">
|
||
|
||
<div class="italic text-gray-700">Disqus comments only available for production</div>
|
||
|
||
</div>
|
||
|
||
</article>
|
||
|
||
|
||
</main>
|
||
<footer class="mt-20 px-10 py-8 bg-gray-200">
|
||
<div id="footer-badge"><a href="https://git.ocoge.club/" target=_new><img loading="lazy" src="/assets/img/git-ocogeclub.svg" class="footer-img"></a><a href="http://creativecommons.org/licenses/by-sa/4.0/deed.ja" target=_new><img loading="lazy" src="/assets/img/License_BY-SA_4.0.svg" class="footer-img"></a></div>
|
||
<div class="max-w-5xl mx-auto text-gray-700 text-center">
|
||
© 2023 <a href="/" class="font-medium" target="_blank" rel="noopener">おこげ俱楽部</a>.
|
||
Made by <a href="https://ocoge.club" target="_blank" rel="noopener">ocogeclub</a>
|
||
using <a href="https://www.11ty.dev" target="_blank" rel="noopener">Eleventy</a> and <a href="https://github.com/dafiulh/vredeburg" target="_blank" rel="noopener">Vredeburg</a>.<br>
|
||
</div>
|
||
</footer>
|
||
<script src="/assets/js/bundle.js"></script>
|
||
</body>
|
||
|
||
<script>
|
||
window.addEventListener('load', (event) => {
|
||
document.getElementsByTagName('html')[0].style.display='block';
|
||
});
|
||
</script>
|
||
|
||
</html> |