Kalo te përmbajtja

6 min lexim

American Corners

Programimi modular

Pse e ndajmë programin në pjesë

Një program i madh është i vështirë ta mbash të gjithin në mendje njëherësh. Zgjidhja është të mos e shohësh si një bllok gjigant, por si një grup pjesësh të vogla, ku secila zgjidh një punë të qartë. Kjo do të thotë "modular": programi yt përbëhet nga module, copa të vogla që i ndërton, i provon dhe i ripërdor më vete.

Mjetin kryesor për këtë e ke takuar tashmë. Një funksion është një pjesë e vogël e programit tënd që zgjidh një nën-problem të caktuar. Në këtë mësim i bashkojmë funksionet: funksione që thërrasin funksione të tjera, dhe import, që të lejon të sjellësh kod që dikush tjetër e ka shkruar më parë. Mendoje si roboti yt në ekran që mëson disa lëvizje të thjeshta, e pastaj i kombinon në diçka më të madhe.

Funksione që thërrasin funksione

Fuqia e vërtetë e funksioneve duket kur një funksion përdor një tjetër. E zgjidh një problem të vogël një herë, i vë një emër, e pastaj ndërton mbi të pa u menduar më për detajet.

Le të themi se do të vizatosh një shtëpi. Një shtëpi janë vetëm dy forma: një katror për muret dhe një trekëndësh për çatinë. Pra i zgjidhim fillimisht këto dy probleme të vogla.

import turtle

t = turtle.Turtle()

def draw_square(size):
    for _ in range(4):
        t.forward(size)
        t.left(90)

def draw_triangle(size):
    for _ in range(3):
        t.forward(size)
        t.left(120)

Tani shtëpia bëhet e lehtë. Funksioni draw_house nuk përsërit asnjë rresht vizatimi. Ai thjesht thërret dy funksionet që i ke tashmë, dhe e çon breshkën në majë të mureve para se të shtojë çatinë.

def draw_house(size):
    draw_square(size)      # muret
    t.penup()
    t.goto(0, size)        # shko te këndi lart majtas
    t.setheading(0)        # kthehu nga e djathta
    t.pendown()
    draw_triangle(size)    # çatia sipër

draw_house(100)
turtle.done()

Vër re çfarë ndodhi. draw_house lexohet gati si një fjali: vizato muret, ngjitu lart, vizato çatinë. Secili funksion i vogël e fsheh ciklin e vet, kështu që funksioni i madh mbetet i shkurtër dhe i qartë. Nëse më vonë do një rrugë me shtëpi, shkruan edhe një cikël që thërret draw_house disa herë. Katrorin dhe trekëndëshin nuk i prek më kurrë. Ky është mendimi modular: ndërto pak nga pak, pastaj kombino.

import: të huazosh kod që ekziston tashmë

import është modularitet në shkallë më të gjerë. Në vend që t'i shkruash vetë të gjitha funksionet, sjell një koleksion të tërë funksionesh që vjen gati. Pikërisht këtë bën rreshti i parë i çdo programi me Turtle.

import turtle
import random

t = turtle.Turtle()
t.forward(random.randint(50, 200))

import turtle të jep të gjitha funksionet e vizatimit. import random të jep funksione për numra të rastësishëm. Ti nuk e shkrove forward ose randint; e shkroi dikush tjetër, dhe import ta vë punën e tij në dispozicion. Një koleksion i tillë quhet librari ose modul.

Ka edhe një formë më të shkurtër që mund ta kesh parë:

from turtle import *

Kjo i sjell funksionet e turtle-it drejt e në skedarin tënd, kështu që mund të shkruash forward(100) në vend të t.forward(100).

Këshillë

Forma import turtle zakonisht është më e qarta. Kur shkruan turtle.forward(100), kushdo që e lexon kodin tënd e sheh saktësisht se nga vjen forward. Me from turtle import *, ai emër thjesht shfaqet nga hiçi, gjë që ngatërron sapo programi yt përdor më shumë se një librari.

Ta ndash kodin tënd në skedarë

Sapo ke disa funksione të dobishme, mund t'i zhvendosësh në një skedar të vetin dhe t'i importosh njësoj si turtle. Një modul nuk është gjë tjetër veçse një skedar Python. Nëse i ruan funksionet e formave në një skedar me emrin shapes.py, një skedar tjetër mund t'i huazojë:

from shapes import draw_house

draw_house(100)

Kjo është e gjithë ideja. turtle dhe random janë skedarë që vijnë me Python; shapes.py është një skedar që e shkrove ti. Të dy janë module, dhe import i trajton njësoj. T'i mbash funksionet e ngjashme bashkë në një skedar të vetin, me emra të qartë, është mënyra si një program që rritet mbetet i lexueshëm në vend që të kthehet në një skript të gjatë e të ndërlikuar.

Provoje tani

Ndërto vetë shtëpinë nga pjesë të vogla. Shkruaj një draw_square(size) dhe një draw_triangle(size), secili me ciklin e vet for, pastaj shkruaj një draw_house(size) që thjesht thërret ato të dyja (me lëvizjen penup, goto, pendown mes tyre). Ekzekuto draw_house(100). Vër re se draw_house nuk përmban asnjë cikël vizatimi të vetin, vetëm emrat e punëve që i zgjidhe tashmë.

Provo veten

  1. Në shembullin e shtëpisë, draw_house nuk përmban asnjë cikël for të vetin, e megjithatë vizaton dy forma të bëra me cikle. Ku shkuan ata cikle, dhe pse kjo e bën draw_house më të lehtë për t'u lexuar?
  2. Cili është ndryshimi mes import turtle dhe from turtle import *? Jep një arsye pse forma e parë mund të jetë më e qartë.
  3. Ke shkruar tri funksione vizatimi dhe do t'i përdorësh në një program të ri pa i kopjuar. Çfarë do të bëje, dhe çfarë do të thotë fjala "modul" këtu?

Nga vjen ky mësim

Ndërtuar mbi

  • Programming in a Data World: Video 5.0 Modular Programming
  • Leksioni 4 (funksionet): kompozimi draw_shape / draw_increasing_squares, shablloni def

Kurset e alphaPlan ndërtohen mbi programe të zhvilluara në klasë, e nuk shpiken për web-in. Kur një pohim mbështetet mbi një standard të jashtëm ose mbi një rast të raportuar, ai emërtohet më sipër që ta kontrollosh vetë e të mos na besosh në fjalë.

Ky kurs u zhvillua nga alphaPlan Center mbi bazën e programeve të realizuara në partneritet me rrjetin American Corners.

Gjete diçka të paqartë, të vjetruar ose që mund të përmirësohet? Sugjero një përmirësim