Ben genelde kendi işlerim için kod yazdığımda fonksiyonsuz yada tekrarlanacak işlemlerde basit fonksyonlar yaziyorum.
Nesne tabanlı dışında Pythonda birçok şey biliyorum.
Nasil fonksiyonel yapıları kodu inceler incelemez anlamış olmam için ne tür araştırmalar yapmalıyım.
Geçen bir arkadaş py dosyanı attı. İçinde yüzlerce fonksiyon vardı. Fonksiyonlarda yorum satırları yoktu. Çok birşey anlamadım.
Nasilsin hocam.
Uzun zamandir yazilimla ilgilenmiyorum.
Eger kodlamada cok fazla fonksiyon varsa kesinlikle icinde aciklama olmasi gerekir yoksa isin icinden cikmazsin. Bazen eski yazdigim projelere bakiyorum, not eklemedigim icin ne oldugunu ben bile anlamakta zorluk cekiyorum. Ancak kodu class yapisiyla yazarsdan cok not eklemesende kodu daha rahat algiliyorsun.
Yanlis hatirlamiyorsam pythonda bir class yapisinda kod yazmak var birde Procedural dedigimiz yukardan asaga yazilan kod yapisi var. Icinde cok fazla fonksiyon olan ve Procedural seklinde class yapisiz yazilan bir kodlamada isler bir noktadan sonra raydan cikiyor. Ne nerden geldi nereye gidecek kafa karisikligina sebep oluyor.
Bunu asmanin tek yolu Class yapisi ile kodlamayi yazmak ve birkac modulde
bunu tasarlamak. Boyle olunca kod inanilmaz duzenli ve basit oluyor. Ben o seviyeye gelememistim.
Bak mesela sana bir kahve makinasinin nasil kodlandigini gondereyim. Angela Ju derslerinden birisiydi. Ustteki arkadasa katiliyorum. Kodla ilgilendikce inanilmaz seyler yapiyorsun. Ben zamaninda bir siteden oto uye olup whois keylerini cekmek icin bir bot yapmistim. Birde bu keylerle domain sorgulamasi yapiyordum. Kodu nasil yaptigima ben bile bugun anlam veremiyorum. O kodlari nasil yazdim diye sasiriyorum. Ilgilenmek lazim projeler gerceklestirmek lazim. Ozellikle Class yapisinda yazmak lazim.
Mesela blackjack oyunu yazmisti Angela you. Kart destesindeki tum kartlari bile class yapisinda nesne olarak yazip, tum kodlamada herhangi bir yerde kolayca kullanabilmisti.
Kahve makinasi:
main.py
from coffee_maker import CoffeeMaker
from menu import Menu
from money_machine import MoneyMachine
money_machine = MoneyMachine()
coffee_maker = CoffeeMaker()
menu = Menu()
is_on = True
while is_on:
options = menu.get_items()
choice = input(f"What would you like? ({options}): ")
if choice == "off":
is_on = False
elif choice == "report":
coffee_maker.report()
money_machine.report()
else:
drink = menu.find_drink(choice)
if coffee_maker.is_resource_sufficient(drink) and money_machine.make_payment(
drink.cost
):
coffee_maker.make_coffee(drink)
menu.py
class MenuItem:
"""Models each Menu Item."""
def __init__(self, name, water, milk, coffee, cost):
self.name = name
self.cost = cost
self.ingredients = {"water": water, "milk": milk, "coffee": coffee}
class Menu:
"""Models the Menu with drinks."""
def __init__(self):
self.menu = [
MenuItem(name="latte", water=200, milk=150, coffee=24, cost=2.5),
MenuItem(name="espresso", water=50, milk=0, coffee=18, cost=1.5),
MenuItem(name="cappuccino", water=250, milk=50, coffee=24, cost=3),
]
def get_items(self):
"""Returns all the names of the available menu items"""
options = ""
for item in self.menu:
options += f"{item.name}/"
return options
def find_drink(self, order_name):
"""Searches the menu for a particular drink by name. Returns that item if it exists, otherwise returns None"""
for item in self.menu:
if item.name == order_name:
return item
print("Sorry that item is not available.")
money_machine.py
class MoneyMachine:
CURRENCY = "$"
COIN_VALUES = {"quarters": 0.25, "dimes": 0.10, "nickles": 0.05, "pennies": 0.01}
def __init__(self):
self.profit = 0
self.money_received = 0
def report(self):
"""Prints the current profit"""
print(f"Money: {self.CURRENCY}{self.profit}")
def process_coins(self):
"""Returns the total calculated from coins inserted."""
print("Please insert coins.")
for coin in self.COIN_VALUES:
self.money_received += (
int(input(f"How many {coin}?: ")) * self.COIN_VALUES[coin]
)
return self.money_received
def make_payment(self, cost):
"""Returns True when payment is accepted, or False if insufficient."""
self.process_coins()
if self.money_received >= cost:
change = round(self.money_received - cost, 2)
print(f"Here is {self.CURRENCY}{change} in change.")
self.profit += cost
self.money_received = 0
return True
else:
print("Sorry that's not enough money. Money refunded.")
self.money_received = 0
return False
coffee_maker.py
class CoffeeMaker:
"""Models the machine that makes the coffee"""
def __init__(self):
self.resources = {
"water": 300,
"milk": 200,
"coffee": 100,
}
def report(self):
"""Prints a report of all resources."""
print(f"Water: {self.resources['water']}ml")
print(f"Milk: {self.resources['milk']}ml")
print(f"Coffee: {self.resources['coffee']}g")
def is_resource_sufficient(self, drink):
"""Returns True when order can be made, False if ingredients are insufficient."""
can_make = True
for item in drink.ingredients:
if drink.ingredients[item] > self.resources[item]:
print(f"Sorry there is not enough {item}.")
can_make = False
return can_make
def make_coffee(self, order):
"""Deducts the required ingredients from the resources."""
for item in order.ingredients:
self.resources[item] -= order.ingredients[item]
print(f"Here is your {order.name} ☕️. Enjoy!")Bakalim bu sene egitimlere geri donecegim.
Python sonra Django