Skip to content

Instantly share code, notes, and snippets.

@hongquan
Last active December 25, 2016 03:04
Show Gist options
  • Save hongquan/54274db9d081c2a3cfabcf8278f55e68 to your computer and use it in GitHub Desktop.
Save hongquan/54274db9d081c2a3cfabcf8278f55e68 to your computer and use it in GitHub Desktop.
OOP vs Functional programming, Stateful vs Stateless
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def square(number):\n",
" return number**2\n",
"\n",
"a = [1, 2, 3, 4]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Functional programming:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 4, 9, 16]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(map(square, a))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Stateless: Hàm `square` được gọi nhiều lần nhưng không bị thay đổi behavior"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"OOP và stateful:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class Greeter:\n",
" guest = None\n",
"\n",
" def meet_guest(self, name):\n",
" self.guest = name\n",
"\n",
" def greet(self):\n",
" if not self.guest:\n",
" print('Uhm, no one comes yet')\n",
" else:\n",
" print('Hello {}'.format(self.guest))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Uhm, no one comes yet\n"
]
}
],
"source": [
"g = Greeter()\n",
"g.greet()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nam\n"
]
}
],
"source": [
"g.meet_guest('Nam')\n",
"g.greet()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Hàm `greet()` được gọi nhiều lần và có sự thay đổi behaviour, do bị phụ thuộc vào `state` nào đó, ở đây là biến `guest`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"OOP và stateless:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class MathOp:\n",
" def square(self, number):\n",
" return number ** 2\n",
"\n",
"m = MathOp()\n",
"m.square(2)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"9"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m.square(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Dùng OOP để implement stateless được, nhưng mà rườm rà không cần thiết, chuối"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2+"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment